¿Cómo comprobar si el USUARIO ya está creado en la base de datos o no en SQL?


¿Hay alguna forma de que a partir de ella pueda saber si el usuario( no el login) ya está creado en la base de datos? Me refiero al usuario no el inicio de sesión, ya que, sé cómo comprobar el inicio de sesión. Necesito verificar el usuario que se crea dentro de un rol específico de BD y a asignado a él.

Este es el código para verificar el inicio de sesión:

SELECT name FROM sys.server_principals WHERE name = 'test_user'

Pero ¿qué hay del usuario? Ya que necesito crear el usuario y asignarle un rol si no está creado. De lo contrario, continuaré sin crear.

Gracias

 37
Author: Mat, 2011-07-17

5 answers

Qué tal:

USE (your database you want to check the user's existence in)

SELECT * 
FROM sys.database_principals
WHERE name = '(your user name to check here)'

sys.server_principals muestra los inicios de sesión definidos en el nivel del servidor - sys.database_principals muestra los principales (por ejemplo, cuentas de usuario) en un nivel de base de datos.

 64
Author: marc_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-17 09:16:43

Esto le indicará el nombre de usuario coincidente para un nombre de inicio de sesión dado

USE MyDB
SELECT
    sp.name AS ServerLoginName,
    dp.name AS DBUserName
FROM
    sys.server_principals sp
    LEFT JOIN
    sys.database_principals dp ON sp.sid = dp.sid
WHERE
    sp.name = 'MyLogin'
 14
Author: gbn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-17 08:42:48
use SomeDatabase
go

/* built-in system function */
select database_principal_id('UserNameHere')

/* check if exists and drop */
if database_principal_id('UserNameHere') is not null
    drop user 'UserNameHere'
go
 8
Author: YearsLater,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-20 15:32:54

Si has encontrado sys.server_principals, me sorprende que no hayas encontrado sys.database_principals. Puede unir las vistas en función de la columna sid.

 3
Author: Damien_The_Unbeliever,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-17 07:59:20

Es posible que también te interese este método...

IF DATABASE_PRINCIPAL_ID('domain\lanid') IS NULL
BEGIN
    CREATE USER [domain\lanid] FOR LOGIN [domain\lanid] WITH DEFAULT_SCHEMA=[dbo]
    EXEC sp_addrolemember N'db_ApplicationUserRole', N'domain\lanid'
END
 0
Author: Prisoner ZERO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-17 15:57:29