49

Azure SQL Database または一般的に MSSQL Server インスタンスのデータベース ユーザーに付与されている現在のロール/アクセス許可を表示する方法を教えていただけますか?

以下のクエリがあります。

SELECT r.name role_principal_name, m.name AS member_principal_name
FROM sys.database_role_members rm 
JOIN sys.database_principals r 
    ON rm.role_principal_id = r.principal_id
JOIN sys.database_principals m 
    ON rm.member_principal_id = m.principal_id
WHERE r.name IN ('loginmanager', 'dbmanager');

さらに、これらのロール「loginmanager」および「dbmanager」に付与されている権限を知る必要がありますか?

これについて私を助けてもらえますか?

4

4 に答える 4

67

sys.database_permissionsの MSDN ドキュメントに従って、このクエリは、接続しているデータベースのプリンシパルに明示的に付与または拒否されたすべてのアクセス許可を一覧表示します。

SELECT DISTINCT pr.principal_id, pr.name, pr.type_desc, 
    pr.authentication_type_desc, pe.state_desc, pe.permission_name
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe
    ON pe.grantee_principal_id = pr.principal_id;

「 Azure SQL Database でのデータベースとログインの管理」に従って、 loginmanagerロールと dbmanager ロールは、Azure SQL Database で使用できる 2 つのサーバー レベルのセキュリティ ロールです。loginmanager ロールにはログインを作成する権限があり、dbmanager ロールにはデータベースを作成する権限があります。masterデータベースに対して上記のクエリを使用して、これらのロールに属するユーザーを表示できます。また、接続中に同じクエリ (フィルター述語を除く) を使用して、各ユーザー データベースのユーザーのロール メンバーシップを決定することもできます。

于 2015-06-29T20:49:37.363 に答える
46

ユーザーに割り当てられたデータベース ロールを表示するには、sys.database_role_membersを使用できます。

次のクエリは、データベース ロールのメンバーを返します。

SELECT DP1.name AS DatabaseRoleName,   
    isnull (DP2.name, 'No members') AS DatabaseUserName   
FROM sys.database_role_members AS DRM  
RIGHT OUTER JOIN sys.database_principals AS DP1  
    ON DRM.role_principal_id = DP1.principal_id  
LEFT OUTER JOIN sys.database_principals AS DP2  
    ON DRM.member_principal_id = DP2.principal_id  
WHERE DP1.type = 'R'
ORDER BY DP1.name;  
于 2018-07-03T00:55:32.077 に答える
-1

特定のユーザーが権限を持つテーブル名やストアド プロシージャなどのオブジェクト名を検索する場合は、次のクエリを使用します。

SELECT pr.principal_id, pr.name, pr.type_desc, 
    pr.authentication_type_desc, pe.state_desc, pe.permission_name, OBJECT_NAME(major_id) objectName
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id
--INNER JOIN sys.schemas AS s ON s.principal_id =  sys.database_role_members.role_principal_id 
     where pr.name in ('youruser1','youruser2') 
于 2018-03-08T03:44:32.527 に答える