Estou trabalhando com o SQL Server 2012. Quero verificar se existe um usuário antes de adicioná-lo a um banco de dados.
Isto é o que eu testei:
USE [MyDatabase]
GO
IF NOT EXISTS (SELECT name
FROM [sys].[server_principals]
WHERE name = N'IIS APPPOOL\MyWebApi AppPool')
Begin
CREATE USER [IIS APPPOOL\MyWebApi AppPool]
FOR LOGIN [IIS APPPOOL\MyWebApi AppPool] WITH DEFAULT_SCHEMA=[dbo]
end
ALTER ROLE [db_owner] ADD MEMBER [IIS APPPOOL\MyWebApi AppPool]
GO
Mas esse código SELECT name FROM [sys].[server_principals]
não retorna se esse usuário existir no MyDatabase
.
Como posso verificar se um usuário existe em MyDatabase
?
Use
sys.database_principals
em vez desys.server_principals
.Portanto, a consulta final ficaria assim (considerando o filtro do usuário):
Eu uso SUSER_ID() e USER_ID() para esse tipo de coisa:
Refinamento adicional, pois isso tornaria uma leitura mais ideal
Se você estiver usando servidores com resistência, poderá verificar vários servidores de uma só vez e retornar um verdadeiro/falso com: