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

How do I lock a Microsoft SQL Server column so it can't be edited from the outside, but the database itself can edit the column?

提问人:Tim098b 提问时间:11/17/2023 最后编辑:marc_sTim098b 更新时间:11/17/2023 访问量:52

问:

我正在尝试在每个SQL Server表中创建一个和一列。我想使该列具有首次创建的行的日期时间。我希望该列是行中已编辑内容的最后一个日期时间。CreatedEditedCreatedEdited

这是我所拥有的:

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 Server 数据库 触发器

评论

0赞 Ken White 11/17/2023
在前端应用程序中处理它,并且不要给用户一个编辑它的位置。

答:

1赞 Trijit 11/17/2023 #1

您要查找的是列级安全性。当您说“从外部”时,必须为该用户分配了一个角色。该角色不应对这些列具有任何写入权限(等)。我想这样你可以加强约束。此链接提供了如何做到这一点的好例子。update, insert