답변

1

주어진 사용자의 모든 사용 권한 경로를 찾으려면 sys.login_token 및 sys.user_token을 사용하십시오.

sys.login_token은 현재 서버 보안 주체가 로그인으로 정의 된 구성원 인 모든 AD 그룹을 제공합니다. 예를 들어 AD 사용자 [domain \ user]가 [domain \ group1] 및 [domain \ group2]의 구성원이고 group1 만 로그인으로 정의 된 경우 group1 만 목록에 표시됩니다. sys.login_token은 로그인이 속한 서버 수준 역할도 나열합니다.

sys.user_token은 데이터베이스 스코프를 제외하고는 모두 동일합니다.

두보기 모두 "현재 사용자"의 컨텍스트에서 작동하므로 권한을 알아 내려면 다른 사람을 가장해야합니다. 구문은 쉬운 충분하다 :

execute as login = 'domain\user'; 
select * from sys.login_token; 
select * from sys.user_token; 
revert; 

는 명시 적으로 사용자에게 부여 된 모든 권한을 얻을의 sys.database_permissions 및 sys.server_permissions을 확인하십시오. 당신은 당신이 다양한 경로에서 선택할 수있는 모든 권한을 계산하기 위해 노력을 통과하지 않으려면

select * from sys.database_permissions 
where grantee_principal_id = user_id(); 

select * from sys.server_permissions 
where grantee_principal_id = suser_id(); 

마지막으로, sys.fn_my_permissions를보십시오. 기본 구문은 다음과 같습니다.

select * from sys.fn_my_permissions('dbo.table', 'object'); 
1

사용 sys.fn_my_permissions

SELECT * FROM fn_my_permissions (NULL, 'DATABASE'); 

는 호출자의 유효 사용 권한 목록을 반환합니다.

SELECT * FROM fn_my_permissions('ATLY', 'USER'); 

'ATLY'라는 사용자의 유효 사용 권한 목록을 반환합니다.

+0

첫 번째 문은 현재 사용자에게 부여 된 데이터베이스 수준 사용 권한을 반환합니다. 즉 누군가가'grant select to [youruser]'를 실행하면, 그 허가가 여기에 나타날 것입니다. 두 번째로는 명시된 사용자에게 사용자에게 부여 된 권한을 반환합니다. 즉, '가장'또는 '통제'와 같은 것을 볼 수 있습니다. 하지만 요점은 사용자가 전달할 수있는 것과 수행 할 수없는 것에 대해 알려주지 않습니다. –

+0

나는 내 자신의 참조를 위해 WEXECUTE WITH OWNER가있는 저장 프로 시저 내부에서 호출자의 권한을 알아야 할 경우 다음 선택을 사용합니다. select database_user = USER_NAME(), [login] = SUSER_SNAME(), [원래 로그인] = ORIGINAL_LOGIN() –

관련 문제