提问人:Tim098b 提问时间:11/17/2023 最后编辑:marc_sTim098b 更新时间:11/17/2023 访问量:52
如何锁定 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?
问:
我正在尝试在每个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
这工作正常,但是我如何使它不能从外部编辑?因此,只有数据库本身可以更新这些列?
答:
1赞
Trijit
11/17/2023
#1
您要查找的是列级安全性。当您说“从外部”时,必须为该用户分配了一个角色。该角色不应对这些列具有任何写入权限(等)。我想这样你可以加强约束。此链接提供了如何做到这一点的好例子。update, insert
评论