Udostępnij za pomocą


IS_MEMBER (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w Microsoft Fabric

Wskazuje, czy aktualny użytkownik należy do określonej grupy Microsoft Windows, grupy Microsoft Entra lub roli bazy SQL Server.

Funkcja IS_MEMBER jest obsługiwana dla grup Microsoft Entra. Jedynym przypadkiem, gdy IS_MEMBER nie działa, jest sytuacja, gdy grupa jest administratorem Microsoft Entra dla instancji SQL.

Transact-SQL konwencje składni

Uwaga / Notatka

Microsoft Entra ID był wcześniej znany jako Azure Active Directory (Azure AD).

Składnia

IS_MEMBER ( { 'group' | 'role' } )  

Arguments

'grupa'
Dotyczy do: SQL Server 2008 (10.0.x) i nowszych

To nazwa grupy Windows lub Microsoft Entra, która jest sprawdzana. Grupa Windows musi mieć format Domain Group\. grupa to sysname.

'rola'
To nazwa roli SQL Server, która jest sprawdzana. Rola to sysname i może obejmować stałe role bazy danych lub role zdefiniowane przez użytkownika, ale nie role serwera.

Typy zwracane

int

Uwagi

IS_MEMBER zwraca następujące wartości.

Wartość zwracana Description
0 Obecny użytkownik nie jest członkiem grupy ani roli.
1 Obecny użytkownik to członek grupy lub rola.
ZERO Ani grupa, ani rola nie są ważne. Po zapytaniu przez logowanie SQL Server lub logowanie za pomocą roli aplikacji, zwraca NULL dla grupy Windows.

IS_MEMBER określa członkostwo w grupie Windows, analizując token dostępu utworzony przez Windows. Token dostępu nie odzwierciedla zmian w członkostwie grupy, które następują po połączeniu użytkownika z instancją SQL Server. Członkostwo w grupie Windows nie może być zapytaniami z logowania SQL Server ani roli aplikacji SQL Server.

Aby dodawać i usuwać członków z roli bazy danych, użyj ALTER ROLE (Transact-SQL). Aby dodać i usunąć członków z roli serwera, użyj ALTER SERVER ROLE (Transact-SQL).

Ta funkcja ocenia przynależność do roli, a nie podstawowe uprawnienia. Na przykład rola db_owner stałej bazy danych ma uprawnienia CONTROL DATABASE . Jeśli użytkownik ma uprawnienia CONTROL DATABASE , ale nie jest członkiem roli, funkcja ta poprawnie raportuje, że użytkownik nie jest członkiem roli db_owner , mimo że użytkownik ma te same uprawnienia.

Członkowie roli stałego administratora systemu wpisują każdą bazę danych jako użytkownik DBO . Sprawdzanie uprawnień dla członka stałej roli administratora systemu sprawdza uprawnienia dla DBO, a nie oryginalnego logowania. Ponieważ dbo nie może być dodane do roli bazy danych i nie istnieje w grupach Windows, dbo zawsze zwraca 0 (lub NULL, jeśli rola nie istnieje).

Aby ustalić, czy inny logowanie SQL Server jest członkiem roli bazy danych, użyj IS_ROLEMEMBER (Transact-SQL). Aby sprawdzić, czy logowanie SQL Server jest członkiem roli serwera, użyj IS_SRVROLEMEMBER (Transact-SQL).

Przykłady

Poniższy przykład sprawdza, czy aktualny użytkownik należy do roli bazy danych, czy do grupy domenowej Windows.

-- Test membership in db_owner and print appropriate message.  
IF IS_MEMBER ('db_owner') = 1  
   PRINT 'Current user is a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') = 0  
   PRINT 'Current user is NOT a member of the db_owner role'  
ELSE IF IS_MEMBER ('db_owner') IS NULL  
   PRINT 'ERROR: Invalid group / role specified';  
GO  
  
-- Execute SELECT if user is a member of ADVWORKS\Shipping.  
IF IS_MEMBER ('ADVWORKS\Shipping') = 1  
   SELECT 'User ' + USER + ' is a member of ADVWORKS\Shipping.';   
GO  

Zobacz też

IS_SRVROLEMEMBER (Transact-SQL)
Podmioty (aparat bazy danych)
Widoki wykazu zabezpieczeń (Transact-SQL)
Funkcje zabezpieczeń (Transact-SQL)