IS_SRVROLEMEMBER(Transact-SQL)
SQL Server 로그인이 지정된 서버 역할의 멤버인지 여부를 나타냅니다.
구문
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
인수
' role '
확인할 서버 역할의 이름입니다. role은 sysname입니다.role의 유효한 값은 사용자 정의 서버 역할이며 다음 고정 서버 역할입니다.
sysadmin
serveradmin
dbcreator
setupadmin
bulkadmin
securityadmin
diskadmin
public
processadmin
' login '
검사할 SQL Server 로그인의 이름입니다. login은 sysname이며 기본값은 NULL입니다. 값을 지정하지 않으면 현재의 실행 컨텍스트에 따른 결과를 얻게 됩니다. 매개 변수에 NULL이라는 단어가 포함되어 있으면 NULL이 반환됩니다.
반환 형식
int
반환 값 |
설명 |
---|---|
0 |
login은 role의 멤버가 아닙니다. |
1 |
login은 role의 멤버입니다. |
NULL |
role 또는 login이 올바르지 않거나 역할 멤버 자격을 볼 수 있는 사용 권한이 없습니다. |
주의
IS_SRVROLEMEMBER를 사용하여 현재 사용자가 서버 역할의 사용 권한이 필요한 동작을 수행할 수 있는지 여부를 확인할 수 있습니다.
login에 Contoso\Mary5와 같은 Windows 로그인이 지정된 경우 해당 로그인에 대해 SQL Server에 대한 직접 액세스가 허용 또는 거부되지 않으면 IS_SRVROLEMEMBER가 NULL을 반환합니다.
선택적 login 매개 변수를 제공하지 않으며 login이 Windows 도메인 로그인인 경우 Windows 그룹 멤버 자격을 통해 고정 서버 역할의 멤버가 될 수 있습니다. 이러한 간접 멤버 자격을 확인하기 위해 IS_SRVROLEMEMBER는 도메인 컨트롤러에 Windows 그룹 멤버 자격 정보를 요청합니다. 도메인 컨트롤러에 액세스할 수 없거나 도메인 컨트롤러가 응답하지 않으면 IS_SRVROLEMEMBER가 사용자 및 사용자의 로컬 그룹만 고려하여 멤버 자격 정보를 반환합니다. 지정된 사용자가 현재 사용자가 아닌 경우 IS_SRVROLEMEMBER가 반환하는 값이 인증자(예: Active Directory)의 마지막 SQL Server 데이터 업데이트와 다를 수 있습니다.
선택적 로그인 매개 변수를 제공하지 않으면 쿼리 중인 Windows 로그인이 sys.server_principals에 있어야 하며, 그렇지 않으면 IS_SRVROLEMEMBER가 NULL을 반환합니다. 이것은 올바른 로그인이 아님을 나타냅니다.
로그인 매개 변수가 도메인 로그인이거나 Windows 그룹을 기반으로 하고 도메인 컨트롤러에 액세스할 수 없는 경우 IS_SRVROLEMEMBER 호출이 실패하고 올바르지 않거나 불완전한 데이터가 반환될 수 있습니다.
도메인 컨트롤러를 사용할 수 없으면 IS_SRVROLEMEMBER 호출은 로컬 Windows 계정 또는 SQL Server 로그인과 같이 Windows 사용자를 로컬로 인증할 수 있는 경우 정확한 정보를 반환합니다.
Windows 그룹이 로그인 인수로 사용되는 경우 IS_SRVROLEMEMBER는 항상 0을 반환하며, 이 Windows 그룹은 지정된 서버 역할의 멤버인 또 다른 Windows 그룹의 멤버입니다.
Windows Vista 및 Windows Server 2008의 UAC(사용자 계정 컨트롤)도 다른 결과를 반환할 수 있습니다. 이는 사용자가 Windows 그룹 멤버 또는 특정 SQL Server 사용자 중 어떤 자격으로 서버에 액세스했는지에 따라 달라집니다.
이 함수는 기본 사용 권한이 아니라 역할 멤버 자격을 평가합니다. 예를 들어 sysadmin 고정 서버 역할에는 CONTROL SERVER 권한이 있습니다. 사용자가 CONTROL SERVER 권한을 갖고 있지만 역할의 멤버는 아닌 경우 이 함수는 해당 사용자가 동일한 사용 권한을 갖고 있더라도 sysadmin 역할의 멤버가 아닌 것으로 올바르게 보고합니다.
관련 함수
현재 사용자가 지정된 Windows 그룹의 멤버인지 또는 SQL Server 데이터베이스 역할의 멤버인지 확인하려면 IS_MEMBER(Transact-SQL)를 사용하고, SQL Server 로그인이 데이터베이스 역할의 멤버인지 여부를 확인하려면 IS_ROLEMEMBER(Transact-SQL)를 사용합니다.
사용 권한
서버 역할에 대한 VIEW DEFINITION 권한이 필요합니다.
예
다음 예에서는 현재 사용자의 SQL Server 로그인이 sysadmin 고정 서버 역할의 멤버인지 여부를 보여 줍니다.
IF IS_SRVROLEMEMBER ('sysadmin') = 1
print 'Current user''s login is a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') = 0
print 'Current user''s login is NOT a member of the sysadmin role'
ELSE IF IS_SRVROLEMEMBER ('sysadmin') IS NULL
print 'ERROR: The server role specified is not valid.'
다음 예에서는 도메인 로그인 Pat가 diskadmin 고정 서버 역할의 멤버인지 여부를 보여 줍니다.
SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');