如何锁定 Microsoft SQL Server 列,使其无法从外部编辑,但数据库本身可以编辑该列?

问题描述 投票:0回答:1

我试图在每个 SQL Server 表中创建一个

Created
Edited
列。我想让
Created
列具有首次创建的行的日期时间。我希望
Edited
列成为该行中某些内容被编辑的最后一个日期时间。

这就是我所拥有的:

CREATE TABLE Vragen
(
    VraagID    INT IDENTITY NOT NULL,
    Tekstvraag VARCHAR(30)  NOT NULL UNIQUE,
    Active     BIT          NOT NULL DEFAULT 1,
    Created    DATETIME     NOT NULL DEFAULT GETDATE(),
    Edited     DATETIME     NOT NULL DEFAULT GETDATE(),
    CONSTRAINT Vragen_pk_VraagnummerID PRIMARY KEY (VraagID),
    CONSTRAINT Check_Tekstvraag CHECK (LEN(TRIM(Tekstvraag)) > 5 AND Tekstvraag LIKE '%?')
)
GO

CREATE TRIGGER update_vragen_trigger
ON Vragen
AFTER UPDATE AS
BEGIN
    UPDATE Vragen 
    SET Edited = GETDATE() 
    FROM Vragen 
    WHERE VraagID IN (SELECT VraagID FROM inserted)
END

这工作得很好,但是我该如何使它不能从外部编辑呢?那么只有数据库本身才能更新这些列?

sql sql-server database triggers
1个回答
1
投票

您正在寻找的是列级安全性。当您说“从外部”时,该用户必须分配有角色。该角色不应该对这些列有任何写入权限(

update, insert
等)。我想这样可以加强约束。这个链接有很好的例子如何做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.