다음을 통해 공유


IS_ROLEMEMBER(Transact-SQL)

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

항목 링크 아이콘 Transact-SQL 구문 표기 규칙

구문

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

인수

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

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

반환 형식

int

반환 값

설명

0

database_principal은 role의 멤버가 아닙니다.

1

database_principal은 role의 멤버입니다.

NULL

database_principal 또는 role이 올바르지 않거나 역할 멤버 자격을 볼 수 있는 사용 권한이 없습니다.

주의

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가 반환하는 값이 인증자(예: Active Directory)의 마지막 SQL Server 데이터 업데이트와 다를 수 있습니다.

선택적 database_principal 매개 변수가 제공되지 않으면 쿼리 중인 데이터베이스 보안 주체가 sys.database_principals에 있어야 하거나 IS_ROLEMEMBER가 NULL을 반환합니다. 이는 database_principal이 이 데이터베이스에서 유효하지 않다는 의미입니다.

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

도메인 컨트롤러를 사용할 수 없으면 로컬 Windows 계정 또는 SQL Server 로그인과 같이 Windows 사용자를 로컬로 인증할 수 있는 경우 IS_ROLEMEMBER 호출이 정확한 정보를 반환합니다.

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

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

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

관련 함수

현재 사용자가 지정된 Windows 그룹의 멤버인지 또는 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)