Udostępnij za pomocą


IS_SRVROLEMEMBER (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Wskazuje, czy logowanie SQL Server jest członkiem określonej roli serwera.

Transact-SQL konwencje składni

Składnia

IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )  

Arguments

'rola'
To nazwa roli serwera, która jest sprawdzana. Rola to sysname.

Poprawne wartości roli to role serwera zdefiniowane przez użytkownika oraz następujące stałe role serwera:

  • Administrator systemów
  • serweradministrator
  • dbcreator
  • setupadmin
  • Bulkadmin
  • securityadmin
  • Diskadmin
  • publiczny
  • Processadmin

'logowanie'
To nazwa logowania do SQL Server, którą trzeba sprawdzić. login to sysname, z domyślnym NULL. Jeśli nie podano wartości, wynik opiera się na bieżącym kontekście Wykonania. Jeśli parametr zawiera słowo NULL, zwraca NULL.

Uwaga / Notatka

Chociaż logowania Microsoft Entra są dostępne w publicznym podglądzie dla Azure SQL Database i Azure Synapse, nie jest obsługiwane użycie zasady Microsoft Entra do logowania .

Typy zwracane

int

Wartość zwracana Description
0 Login nie jest członkiem role.

W bazie danych Azure SQL to zdanie zawsze zwraca 0.
1 Login jest członkiem Role.
ZERO Rola lub login nie jest ważny albo nie masz zgody na przeglądanie członkostwa w roli.

Uwagi

Użyj IS_SRVROLEMEMBER, aby sprawdzić, czy obecny użytkownik może wykonać działanie wymagające uprawnień roli serwera.

Jeśli logowanie Windows, takie jak Contoso\Mary5, jest określone jako logowanie, IS_SRVROLEMEMBER zwraca NULL, chyba że logowanie zostało przyznane lub odrzucone bezpośredniego dostępu do SQL Server.

Jeśli opcjonalny parametr logowania nie jest dostępny, a logowanie dotyczy domeny Windows, może to być członek stałej roli serwera poprzez członkostwo w grupie Windows. Aby rozwiązać takie pośrednie członkostwa, IS_SRVROLEMEMBER żąda od kontrolera domeny informacji o członkostwie w grupie Windows. Jeśli kontroler domeny jest niedostępny lub nie odpowiada, IS_SRVROLEMEMBER zwraca informacje o przynależności do ról, uwzględniając tylko użytkownika i jego lokalne grupy. Jeśli użytkownik nie jest aktualnym, wartość zwracana przez IS_SRVROLEMEMBER może różnić się od ostatniej aktualizacji danych autora (np. Active Directory) do SQL Server.

Jeśli opcjonalny parametr logowania jest dostępny, logowanie Windows, które jest zapytania, musi być obecne w sys.server_principals, inaczej IS_SRVROLEMEMBER zwraca NULL. To oznacza, że logowanie nie jest ważne.

Gdy parametr logowania jest domeną lub opartą na grupie Windows, a kontroler domeny jest niedostępny, wywołania IS_SRVROLEMEMBER zawiodą i mogą zwracać nieprawidłowe lub niepełne dane.

Jeśli kontroler domeny nie jest dostępny, wywołanie IS_SRVROLEMEMBER zwraca dokładne informacje, gdy zasada Windows może być uwierzytelniona lokalnie, na przykład przez lokalne konto Windows lub logowanie SQL Server.

IS_SRVROLEMEMBER zawsze zwraca 0, gdy grupa Windows jest używana jako argument logowania, a ta grupa Windows jest członkiem innej grupy Windows, która z kolei jest członkiem określonej roli serwera.

Ustawienie User Account Control (UAC) może również powodować różne wyniki. Zależałoby to od tego, czy użytkownik uzyskiwał dostęp do serwera jako członek grupy Windows, czy jako konkretny użytkownik SQL Server.

Ta funkcja ocenia przynależność do roli, a nie podstawowe uprawnienia. Na przykład rola administratora systemu stałego serwera ma uprawnienia CONTROL SERVER . Jeśli użytkownik ma uprawnienia CONTROL SERVER , ale nie jest członkiem roli, ta funkcja poprawnie zgłosi, że użytkownik nie jest członkiem roli administratora systemu , mimo że użytkownik ma te same uprawnienia.

Aby ustalić, czy obecny użytkownik należy do określonej grupy Windows, grupy Microsoft Entra czy roli bazy danych SQL Server, użyj IS_MEMBER (Transact-SQL). Aby określić, czy logowanie SQL Server jest członkiem roli bazy danych, użyj IS_ROLEMEMBER (Transact-SQL).

Permissions

Wymaga uprawnień VIEW DEFINITION na rolę serwera.

Przykłady

Poniższy przykład wskazuje, czy logowanie SQL Server dla obecnego użytkownika należy do sysadmin roli stałego serwera.

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.';  

Poniższy przykład wskazuje, czy domena logowania Pat jest członkiem roli diskadmina na stałym serwerze.

SELECT IS_SRVROLEMEMBER('diskadmin', 'Contoso\Pat');  

Zobacz też

IS_MEMBER (Transact-SQL)
Funkcje zabezpieczeń (Transact-SQL)