Столбцы по умолчанию, обновленные, созданные столбцами в таблицах SQL Server 2008 - PullRequest
3 голосов
/ 13 июля 2011

Недавно я столкнулся с конфликтом в моей команде, когда подряд кто-то обновил информацию, и никто не был готов принять, кто это сделал.У нас всегда есть столбцы, обновленные, обновленные даты, созданные и созданные столбцы даты, и лицо, имеющее доступ для чтения и записи к БД, может обновлять данные.

Теперь мой вопрос заключается в том, что я хотел бы установить эти конкретные столбцы только для чтения и хотел бы установить значения по умолчанию в зависимости от того, кто обращается к базе данных, возможно ли это?Если да, любая помощь будет высоко оценена.

  • NiK

Ответы [ 3 ]

3 голосов
/ 13 июля 2011

В ваших текущих настройках, если ваши разработчики имеют такой доступ к данным, как это звучит, просто не существует пуленепробиваемого способа получить гарантию целостности, которую вы ищете.Все, что вы делаете для аудита, они могут подделать и отменить.

Возможно, вы захотите взглянуть на функцию сервера Sql под названием «Изменить сбор данных».Это требует, по крайней мере, корпоративной версии, но она позволяет вам автоматизировать это и хранить ваш контрольный журнал отдельно от фактических данных (что хорошо), таким образом, что разработчики с привилегированным доступом не могут его подделать.

1 голос
/ 13 июля 2011

Вы можете использовать триггеры.Я полагаю, ваши колледжи не будут обманывать и отключать / включать триггеры.

CREATE TABLE [dbo].[myTable](
    [MyID] [uniqueidentifier] NOT NULL,
    [MyText] [nvarchar](50) NULL,
    [MyNumber] [int] NULL,
    [CreatedBy] [nvarchar](50) NULL,
    [UpdatedBy] [nvarchar](50) NULL,
 CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED 
(
    [MyID] ASC
)
GO

CREATE TRIGGER [dbo].[myTable_OnInsert]
   ON  [dbo].[myTable]
   INSTEAD OF INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    INSERT INTO dbo.myTable (MyID, MyText, MyNumber, CreatedBy, UpdatedBy)
        SELECT
            I.MyID, I.MyText, I.MyNumber, CURRENT_USER, CURRENT_USER
        FROM inserted AS I

END
GO

CREATE TRIGGER [dbo].[myTable_OnUpdate]
   ON [dbo].[myTable]
   AFTER UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    UPDATE dbo.myTable
        SET UpdatedBy = CURRENT_USER
    FROM inserted AS I

END
GO
1 голос
/ 13 июля 2011

Вам придется ограничить доступ к этим таблицам с помощью хранимых процедур и представлений.

С помощью процедуры добавления / обновления вы можете гарантировать, что только ваша процедура обновляет столбцы отслеживания. Затем вы удалили бы права на запись в эти таблицы. Так что пользователи ДОЛЖНЫ использовать процедуры добавления / обновления для ввода / изменения данных в этих таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...