Sql-Server

撤銷和授予對 SQL Server 數據庫的權限

  • November 11, 2020

我有一個使用者,我想授予除 DROP、TRUNCATE、DELETE、INSERT 和 UPDATE 之外的所有數據庫表的所有權限。

數據庫有300多張表,我不能一一做。我需要類似的東西:

REVOKE DROP, TRUNCATE, DELETE, UPDATE, INSERT ON DATABASENAME.* FROM USER1;

*但是當我將 DATABASE.* 與代表所有表一起放置時,它會引發錯誤。

通過授予/拒絕權限來完成您想要的事情是不可能的。

要拒絕DELETEINSERT並且UPDATE使使用者成為db_denydatawriter固定數據庫角色的成員就足夠了,即使使用者具有從映射到此數據庫的其他角色或 Windows 組的成員身份繼承的某些權限,拒絕也會獲勝。

但是要允許對您的表格進行任何更改,您的使用者必須具有ALTER TABLE權限或成為db_ddladmin角色成員。

db_ddladmin角色不僅為您提供了更改表的功能,它還為您的使用者提供了在數據庫中創建/更改任何其他對象(但不是主體)的權限,不僅是表,而且可能是您想要的。

為了不允許 DROPTRUNCATE你應該拒絕相同的 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,但不能在DROPand上使用TRUNCATE。沒有像你寫的那樣的許可DROPTRUNCATE

DENY DELETE, UPDATE, INSERT ON DATABASE::[databasename] TO user1;

但是,您應該考慮要授予的權限並檢查數據庫角色

引用自:https://dba.stackexchange.com/questions/279504