Azure SQL Server 인스턴스에서 데이터베이스 사용자에게 부여된 역할 및 사용 권한을 보려면 어떻게 해야 합니까?
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" 역할에 부여된 권한이 무엇인지 추가로 알고 싶습니다.
이것 좀 도와주시겠어요?
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 데이터베이스의 데이터베이스 및 로그인 관리에 따라 로그인 관리자 및 dbmanager 역할은 Azure SQL 데이터베이스에서 사용할 수 있는 두 서버 수준 보안 역할입니다.로그인 관리자 역할에는 로그인을 생성할 수 있는 권한이 있고 dbmanager 역할에는 데이터베이스를 생성할 수 있는 권한이 있습니다.마스터 데이터베이스에 대해 위에 있는 쿼리를 사용하여 이러한 역할에 속하는 사용자를 볼 수 있습니다.또한 각 사용자 데이터베이스에 연결된 동안 동일한 쿼리(필터 술어 제외)를 사용하여 각 사용자 데이터베이스에 있는 사용자의 역할 구성원 자격을 결정할 수 있습니다.
사용자에게 할당된 데이터베이스 역할을 보려면 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;
@tmullaney의 응답을 기반으로 sys.objects 보기에서 join을 남겨 객체에 대한 명시적 사용 권한이 부여되었을 때 통찰력을 얻을 수도 있습니다.왼쪽 조인을 사용해야 합니다.
SELECT DISTINCT pr.principal_id, pr.name AS [UserName], pr.type_desc AS [User_or_Role], pr.authentication_type_desc AS [Auth_Type], pe.state_desc,
pe.permission_name, pe.class_desc, o.[name] AS 'Object'
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id
LEFT JOIN sys.objects AS o on (o.object_id = pe.major_id)
@brentlightsey의 답변을 바탕으로 시스템에 왼쪽 조인을 추가할 수 있습니다.스키마 수준에 대한 사용 권한도 표시합니다.
SELECT DISTINCT
pr.principal_id
, pr.name AS [UserName]
, pr.type_desc AS [User_or_Role]
, pr.authentication_type_desc AS [Auth_Type]
, pe.state_desc
, pe.permission_name
, pe.class_desc
, coalesce(o.[name], sch.name) AS [Object]
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe
ON pe.grantee_principal_id = pr.principal_id
LEFT JOIN sys.objects AS o
ON o.object_id = pe.major_id
LEFT JOIN sys.schemas AS sch
ON sch.schema_id = pe.major_id
AND class_desc = 'SCHEMA'
특정 사용자가 권한을 가진 테이블 이름 및 저장 프로시저와 같은 개체 이름을 찾으려면 다음 쿼리를 사용합니다.
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')
언급URL : https://stackoverflow.com/questions/31120912/how-to-view-the-roles-and-permissions-granted-to-any-database-user-in-azure-sql
'programing' 카테고리의 다른 글
EscapeUriString과 EscapeDataString의 차이점은 무엇입니까? (0) | 2023.05.12 |
---|---|
대부분의 포트에서 수신 중인 경우 Node.js EACCES 오류 (0) | 2023.05.12 |
Debug.WriteLine이 작동하지 않습니다. (0) | 2023.05.12 |
POI 생성 Excel 파일의 셀에 테두리 추가 (0) | 2023.05.12 |
UITableViewController 외부의 정적 테이블 보기 (0) | 2023.05.12 |