Sql-Server
當我啟用更改跟踪時,為什麼我的 INSERT 在 SELECT 權限上失敗?
我在 SQL Server 2014 數據庫中有一個使用者,該使用者只有插入表的權限(沒有選擇權限)。在表上啟用更改跟踪時,插入將失敗
The SELECT permission was denied on the object ...
為什麼會這樣?
重現步驟:
USE [master]; CREATE DATABASE insert_test; GO USE insert_test; GO CREATE TABLE dbo.test(id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, value NVARCHAR(50)); ALTER DATABASE insert_test SET CHANGE_TRACKING=ON; ALTER TABLE dbo.test ENABLE CHANGE_TRACKING; GO CREATE LOGIN test_user WITH PASSWORD='FD3nIk1p(4$LKH!eSY'; CREATE USER test_user FOR LOGIN test_user; GRANT INSERT ON dbo.test TO test_user; GO EXECUTE AS USER='test_user'; INSERT INTO dbo.test(value) VALUES(N'hello'); -- Fails with: The SELECT permission was denied on the object 'test', database 'insert_test', schema 'dbo' /* -- Cleanup USE [master]; GO DROP DATABASE insert_test; GO DROP LOGIN test_user; GO */
更改跟踪操作在使用者的上下文中執行,為了跟踪正在更改的內容,必須在更改之前使用 SELECT 讀取行。