撤銷和授予對 SQL Server 數據庫的權限
我有一個使用者,我想授予除 DROP、TRUNCATE、DELETE、INSERT 和 UPDATE 之外的所有數據庫表的所有權限。
數據庫有300多張表,我不能一一做。我需要類似的東西:
REVOKE DROP, TRUNCATE, DELETE, UPDATE, INSERT ON DATABASENAME.* FROM USER1;
*
但是當我將 DATABASE.* 與代表所有表一起放置時,它會引發錯誤。
僅通過授予/拒絕權限來完成您想要的事情是不可能的。
要拒絕
DELETE
,INSERT
並且UPDATE
使使用者成為db_denydatawriter
固定數據庫角色的成員就足夠了,即使使用者具有從映射到此數據庫的其他角色或 Windows 組的成員身份繼承的某些權限,拒絕也會獲勝。但是要允許對您的表格進行任何更改,您的使用者必須具有
ALTER TABLE
權限或成為db_ddladmin
角色成員。
db_ddladmin
角色不僅為您提供了更改表的功能,它還為您的使用者提供了在數據庫中創建/更改任何其他對象(但不是主體)的權限,不僅是表,而且可能是您想要的。為了不允許
DROP
和TRUNCATE
你應該拒絕相同的ALTER TABLE
權限,所以在這裡你應該決定,或者你的使用者有這個權限並且可以alter
你的表,drop
包括truncate
,或者沒有。此處的解決方案可能是
ddl-trigger
在您手動回滾DROP TABLE
不需要的使用者發出的任何內容的地方使用。要更改您的使用者應該擁有的 ddl-trigger
ALTER ANY DATABASE DDL TRIGGER
,如果它只是db_ddladmin
.沒有辦法
truncate
在保留ALTER TABLE
權限的同時禁止表,因為ddl-trigger
不會擷取它。
REVOKE
手段是收回特權。如果你沒有給任何使用者任何權限,你不能收回。您可以使用
DENY
,但不能在DROP
and上使用TRUNCATE
。沒有像你寫的那樣的許可DROP
。TRUNCATE
DENY DELETE, UPDATE, INSERT ON DATABASE::[databasename] TO user1;
但是,您應該考慮要授予的權限並檢查數據庫角色。