다음을 통해 공유


IS_ROLEMEMBER(Transact-SQL)

적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

지정된 데이터베이스 보안 주체가 지정된 데이터베이스 역할의 멤버인지 여부를 나타냅니다.

Transact-SQL 구문 표기 규칙

참고 항목

Microsoft Entra ID는 이전의 Azure AD(Azure Active Directory)입니다.

Syntax

IS_ROLEMEMBER ( 'role' [ , 'database_principal' ] )  

참고 항목

SQL Server 2014(12.x) 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.

인수

' role '
확인할 데이터베이스 역할의 이름입니다. rolesysname입니다.

' database_principal '
확인할 데이터베이스 사용자, 데이터베이스 역할 또는 애플리케이션 역할의 이름입니다. database_principalsysname이며 기본값은 NULL입니다. 값을 지정하지 않으면 현재의 실행 컨텍스트에 따른 결과를 얻게 됩니다. 매개 변수에 NULL이라는 단어가 포함되어 있으면 NULL이 반환됩니다.

반환 형식

int

반환 값 설명
0 database_principal 역할멤버가 아닙니다.
1 database_principal역할의 구성원입니다.
NULL database_principal 또는 역할이 유효하지 않거나 역할 멤버 자격을 볼 수 있는 권한이 없습니다.

설명

IS_ROLEMEMBER 함수는 관리자가 Microsoft Entra 그룹의 구성원인 경우 Microsoft Entra 관리자에 대해 지원되지 않습니다. IS_ROLEMEMBER 함수는 해당 그룹이 Microsoft Entra 관리자가 아닌 한 Microsoft Entra 그룹의 구성원인 Microsoft Entra 사용자에 대해 지원됩니다.

IS_ROLEMEMBER를 사용하여 현재 사용자가 데이터베이스 역할의 사용 권한이 필요한 동작을 수행할 수 있는지 여부를 확인할 수 있습니다.

database_principal에 SQL Server에 대한 직접 액세스가 부여 또는 거부되지 않은 경우 database_principal이 Contoso\Mary5 등의 Windows 로그인 기반이면 IS_ROLEMEMBER가 NULL을 반환합니다.

선택적 database_principal 매개 변수가 제공되지 않고 database_principal Windows 도메인 로그인을 기반으로 하는 경우 Windows 그룹의 멤버 자격을 통해 데이터베이스 역할의 멤버가 될 수 있습니다. 이러한 간접 멤버 자격을 확인하기 위해 IS_ROLEMEMBER는 도메인 컨트롤러에 Windows 그룹 멤버 자격 정보를 요청합니다. 도메인 컨트롤러에 액세스할 수 없거나 응답하지 않는 경우 IS_ROLEMEMBER 사용자 및 로컬 그룹만 고려하여 역할 멤버 자격 정보를 반환합니다. 지정한 사용자가 현재 사용자가 아닌 경우 IS_ROLEMEMBER 반환된 값이 SQL Server에 대한 인증자의 마지막 데이터 업데이트(예: Active Directory)와 다를 수 있습니다.

선택적 database_principal 매개 변수가 제공되면 사용자가 sys.database_principals 존재하거나 IS_ROLEMEMBER NULL을 반환해야 합니다.

database_principal 매개 변수가 도메인 로그인 기반 또는 Windows 그룹을 기반으로 하고 도메인 컨트롤러에 액세스할 수 없는 경우 IS_ROLEMEMBER 호출이 실패하고 올바르지 않거나 불완전한 데이터가 반환될 수 있습니다.

도메인 컨트롤러를 사용할 수 없는 경우 IS_ROLEMEMBER 호출은 Windows 보안 주체를 로컬로 인증할 수 있는 경우(예: 로컬 Windows 계정 또는 SQL Server 로그인) 정확한 정보를 반환합니다.

Windows 그룹이 데이터베이스 보안 주체 인수로 사용되는 경우 IS_ROLEMEMBER는 항상 0을 반환하며, 이 Windows 그룹은 지정된 데이터베이스 역할의 멤버인 또 다른 Windows 그룹의 멤버입니다.

Windows Vista 및 Windows Server 2008의 UAC(사용자 계정 컨트롤)도 다른 결과를 반환할 수 있습니다. 이는 사용자가 Windows 그룹 멤버 또는 특정 SQL Server 사용자 중 어떤 자격으로 서버에 액세스했는지에 따라 다릅니다.

이 함수는 기본 사용 권한이 아니라 역할 멤버 자격을 평가합니다. 예를 들어 db_owner 고정 데이터베이스 역할에는 CONTROL DATABASE 권한이 있습니다. 사용자에게 CONTROL DATABASE 권한이 있지만 역할의 멤버가 아닌 경우 이 함수는 사용자에게 동일한 사용 권한이 있더라도 사용자가 db_owner 역할의 멤버가 아니라는 것을 올바르게 보고합니다.

sysadmin 고정 서버 역할의 멤버는 모든 데이터베이스를 dbo 사용자로 입력합니다. sysadmin 고정 서버 역할의 멤버에 대한 사용 권한을 확인하려면 원래의 로그인이 아닌 dbo에 대한 사용 권한을 확인합니다. dbo는 데이터베이스 역할에 추가할 수 없고 Windows 그룹에 존재하지 않으므로 dbo는 항상 0(또는 역할이 없는 경우 NULL)을 반환합니다.

현재 사용자가 지정된 Windows 그룹, Microsoft Entra 그룹 또는 SQL Server 데이터베이스 역할의 구성원인지 확인하려면 IS_MEMBER(Transact-SQL)를 사용합니다. SQL Server 로그인이 서버 역할의 멤버인지 여부를 확인하려면 IS_SRVROLEMEMBER(Transact-SQL)를 사용합니다.

사용 권한

데이터베이스 역할에 대한 VIEW DEFINITION 권한이 필요합니다.

예제

다음 예에서는 현재 사용자가 db_datareader 고정 데이터베이스 역할의 멤버인지 여부를 보여 줍니다.

IF IS_ROLEMEMBER ('db_datareader') = 1  
   print 'Current user is a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') = 0  
   print 'Current user is NOT a member of the db_datareader role'  
ELSE IF IS_ROLEMEMBER ('db_datareader') IS NULL  
   print 'ERROR: The database role specified is not valid.';  

참고 항목

CREATE ROLE(Transact-SQL)
ALTER ROLE(Transact-SQL)
DROP ROLE(Transact-SQL)
CREATE SERVER ROLE(Transact-SQL)
ALTER SERVER ROLE(Transact-SQL)
DROP SERVER ROLE(Transact-SQL)
IS_MEMBER(Transact-SQL)
IS_SRVROLEMEMBER(Transact-SQL)
보안 함수(Transact-SQL)