Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Gebruikers zijn zwevend in SQL Server wanneer een databasegebruiker is gebaseerd op een aanmelding in de master database, maar de aanmelding bestaat niet meer in master. Dit kan gebeuren wanneer de aanmelding wordt verwijderd of wanneer de database wordt verplaatst naar een andere server waarop de aanmelding niet bestaat. In dit artikel wordt beschreven hoe u zwevende gebruikers kunt vinden en ze opnieuw kunt toewijzen aan aanmeldingen.
Opmerking
Verminder de mogelijkheid van zwevende gebruikers door ingesloten databasegebruikers te gebruiken voor databases die mogelijk worden verplaatst. Zie Uw database draagbaar maken met behulp van ingesloten databasesvoor meer informatie.
Achtergrond
Voor verbindingen met een database op een exemplaar van SQL Server die een beveiligingsprincipal (databasegebruikersidentiteit) gebruiken op basis van een aanmelding, moet de principal een geldige aanmelding in de master database hebben. Deze aanmelding wordt gebruikt in het verificatieproces waarmee de identiteit van de principal wordt geverifieerd en wordt bepaald of de principal verbinding mag maken met het exemplaar van SQL Server. De SQL Server-aanmeldingen op een serverexemplaren zijn zichtbaar in de sys.server_principals catalogusweergave en de compatibiliteitsweergave sys.sql_logins .
SQL Server-aanmeldingen hebben toegang tot afzonderlijke databases als een databasegebruiker die is toegewezen aan de SQL Server-aanmelding. Er zijn drie uitzonderingen op deze regel:
Ingesloten databasegebruikers
Ingesloten databasegebruikers verifiëren zich op gebruikersdatabaseniveau en zijn niet gekoppeld aan aanmeldingen. Dit model wordt aanbevolen omdat de databases draagbaarder zijn en ingesloten databasegebruikers niet zwevend kunnen worden. Ze moeten echter opnieuw worden gemaakt voor elke database. Dit model kan onpraktisch zijn in een omgeving met veel databases.
Het gastaccount
Wanneer dit account is ingeschakeld in een database, kunnen SQL Server-aanmeldingen die niet zijn toegewezen aan een databasegebruiker, toegang krijgen tot de database als gastgebruiker . Het gastaccount is standaard uitgeschakeld.
Microsoft Windows-groepslidmaatschappen
Een SQL Server-aanmelding die is gemaakt op basis van een Windows-gebruiker, heeft toegang tot een database als de Windows-gebruiker lid is van een Windows-groep die ook een gebruiker in de database is.
Informatie over de toewijzing van een SQL Server-aanmelding aan een databasegebruiker wordt opgeslagen in de database. Deze bevat de naam van de databasegebruiker en de beveiligings-id (SID) van de bijbehorende SQL Server-aanmelding. De machtigingen van deze databasegebruiker worden toegepast op autorisatie in de database.
Een databasegebruiker (op basis van een aanmelding) waarvoor de bijbehorende SQL Server-aanmelding niet is gedefinieerd of onjuist is gedefinieerd op een serverexemplaren, kan zich niet aanmelden bij het exemplaar. Een dergelijke gebruiker wordt geacht een zwevende gebruiker van de database op dat serverexemplaren te zijn. Zwevend kan optreden als de databasegebruiker is toegewezen aan een aanmelding SID die niet aanwezig is in de master database. Een databasegebruiker kan zwevend raken nadat een database is hersteld of gekoppeld aan een ander exemplaar van SQL Server, waar de aanmelding nooit is gemaakt. Een databasegebruiker kan ook zwevend worden als de bijbehorende SQL Server-aanmelding wordt verwijderd. Zelfs als de aanmelding opnieuw wordt gemaakt, heeft deze een andere SID, zodat de databasegebruiker nog steeds zwevend is.
Zwevende gebruikers detecteren
Voor SQL Server en PDW
Als u zwevende gebruikers in SQL Server wilt detecteren op basis van ontbrekende aanmeldingen voor SQL Server-verificatie, voert u de volgende instructie uit in de gebruikersdatabase:
SELECT dp.type_desc, dp.sid, dp.name AS user_name
FROM sys.database_principals AS dp
LEFT JOIN sys.server_principals AS sp
ON dp.sid = sp.sid
WHERE sp.sid IS NULL
AND dp.authentication_type_desc = 'INSTANCE';
De uitvoer bevat de SQL Server-verificatiegebruikers en bijbehorende SID's in de huidige database die niet zijn gekoppeld aan een SQL Server-aanmelding.
Voor Azure SQL Database en Azure Synapse Analytics
De sys.server_principals tabel is niet beschikbaar in SQL Database of Azure Synapse Analytics. Identificeer zwevende gebruikers in deze omgevingen door de volgende stappen uit te voeren:
Maak verbinding met de
masterdatabase en selecteer de SID's voor de aanmeldingen met behulp van de volgende query:SELECT sid FROM sys.sql_logins WHERE type = 'S';Maak verbinding met de gebruikersdatabase en controleer de SID's van de gebruikers in de
sys.database_principalstabel met behulp van de volgende query:SELECT name, sid, principal_id FROM sys.database_principals WHERE type = 'S' AND name NOT IN ('guest', 'INFORMATION_SCHEMA', 'sys') AND authentication_type_desc = 'INSTANCE';Vergelijk de twee lijsten om te bepalen of er gebruikers-SID's in de gebruikersdatabasetabel
sys.database_principalsstaan die niet overeenkomen met aanmeldings-SID's in demasterdatabasetabelsql_logins.
Een zwevende gebruiker oplossen
Gebruik in de master database de instructie CREATE LOGIN met de SID optie om een ontbrekende aanmelding opnieuw te maken. Geef de SID databasegebruiker op die u in de vorige sectie hebt verkregen.
CREATE LOGIN <login_name>
WITH PASSWORD = '<use_a_strong_password_here>',
SID = <SID>;
Als u een zwevende gebruiker wilt toewijzen aan een aanmelding die al bestaat master, voert u de instructie ALTER USER uit in de gebruikersdatabase en geeft u de aanmeldingsnaam op:
ALTER USER <user_name> WITH Login = <login_name>;
Wanneer u een ontbrekende aanmelding opnieuw maakt, heeft de gebruiker toegang tot de database met behulp van het opgegeven wachtwoord. De gebruiker kan vervolgens het wachtwoord van het aanmeldingsaccount wijzigen met behulp van de ALTER LOGIN instructie:
ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
Belangrijk
Elke aanmelding kan een eigen wachtwoord wijzigen. Alleen aanmeldingen met de ALTER ANY LOGIN machtiging kunnen het wachtwoord van de aanmelding van een andere gebruiker wijzigen. Alleen leden van de rol sysadmin kunnen echter wachtwoorden van sysadmin-rolleden wijzigen.
Verwante inhoud
- AANMELDING MAKEN (Transact-SQL)
- ALTER USER (Transact-SQL)
- GEBRUIKER AANMAKEN (Transact-SQL)
- sys.database_principals (Transact-SQL)
- sys.server_principals (Transact-SQL)
- sp_change_users_login (Transact-SQL)
- sp_addlogin (Transact-SQL)
- sp_grantlogin (Transact-SQL)
- sp_password (Transact-SQL)
- sys.sysusers (Transact-SQL)
- sys.sql_logins (Transact-SQL)
- sys.syslogins (Transact-SQL)