Sql-Server-2016

對數據庫的 ALTER 權限允許創建安全主體

  • November 19, 2021

似乎ALTER在數據庫級別授予的權限允許被授予權限的主體在數據庫中創建安全主體。

考慮下面的例子:

/* setup database */
CREATE DATABASE MyNewDB
GO

USE MyNewDB
GO

/* create a login and user and then grant ALTER permissions */
CREATE LOGIN MyLogin WITH PASSWORD = 'My57r0ngp455w0rd'
CREATE USER MyUser FOR LOGIN MyLogin
GRANT ALTER TO MyUser
GO

/* running as our new user which only has ALTER permissions, create a user and a role */
EXECUTE AS LOGIN = 'MyLogin'

CREATE USER UserCreatedByMyLogin FOR LOGIN SomeOtherLogin
CREATE ROLE RoleCreatedByMyLogin
ALTER ROLE RoleCreatedByMyLogin ADD MEMBER UserCreatedByMyLogin

REVERT 

/* verify success */
SELECT  USER_NAME(role_principal_id),
       USER_NAME(member_principal_id)
FROM    sys.database_role_members
WHERE   role_principal_id = USER_ID('RoleCreatedByMyLogin') AND
       member_principal_id = USER_ID('UserCreatedByMyLogin') 

使用者 MyUser 能夠創建一個使用者、一個角色,然後將使用者添加到角色中,只有 ALTER 權限。

ALTER狀態的文件

改變

賦予更改特定安全對象的屬性(所有權除外)的能力。當授予範圍時,ALTER 還賦予更改、創建或刪除該範圍內包含的任何安全對象的能力。例如,對模式的 ALTER 權限包括從模式中創建、更改和刪除對象的能力。

CREATE USER 的文件說明

需要對數據庫具有 ALTER ANY USER 權限。

CREATE ROLE狀態的文件

需要數據庫的 CREATE ROLE 權限或 db_securityadmin 固定數據庫角色的成員身份。

所以沒有任何文件似乎概述了我在上面看到的行為。這是一個錯誤,還是我錯過了什麼?

ALTER 還賦予更改、創建或刪除該範圍內包含的任何安全對象的能力。

USER 是數據庫範圍的安全對象(請參閱文件中的表),因此CREATE USER權限是由包含的安全對象授予的GRANT ALTER

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