usuario - Comprobando si ya existe un inicio de sesión de SQL Server
para que sirve el usuario sa en sql server (9)
¿Qué es exactamente lo que quieres comprobar para iniciar sesión o para el usuario? se crea un inicio de sesión en el nivel del servidor y se crea un usuario a nivel de base de datos para que el inicio de sesión sea único en el servidor
también se crea un usuario contra un inicio de sesión, un usuario sin inicio de sesión es un usuario huérfano y no es útil ya que no puede llevar a cabo el inicio de sesión del servidor sql sin un inicio de sesión
tal vez necesites esto
verificar el inicio de sesión
select ''X'' from master.dbo.syslogins where loginname=<username>
la consulta anterior devuelve ''X'' si el inicio de sesión existe, devuelve nulo
luego crea un inicio de sesión
CREATE LOGIN <username> with PASSWORD=<password>
esto crea un inicio de sesión en el servidor SQL .pero solo acepta contraseñas seguras
crea un usuario en cada base de datos que quieras para iniciar sesión como
CREATE USER <username> for login <username>
asignar derechos de ejecución al usuario
GRANT EXECUTE TO <username>
DEBE TENER permisos SYSADMIN o decir ''sa'' para abreviar
puedes escribir un procedimiento sql para eso en una base de datos
create proc createuser
(
@username varchar(50),
@password varchar(50)
)
as
begin
if not exists(select ''X'' from master.dbo.syslogins where loginname=@username)
begin
if not exists(select ''X'' from sysusers where name=@username)
begin
exec(''CREATE LOGIN ''+@username+'' WITH PASSWORD=''''''+@password+'''''''')
exec(''CREATE USER ''+@username+'' FOR LOGIN ''+@username)
exec(''GRANT EXECUTE TO ''+@username)
end
end
end
Necesito verificar si ya existe un inicio de sesión específico en SQL Server, y si no es así, entonces necesito agregarlo.
He encontrado el siguiente código para agregar realmente el inicio de sesión a la base de datos, pero quiero ajustar esto en una declaración IF (de alguna manera) para verificar si el inicio de sesión existe primero.
CREATE LOGIN [myUsername] WITH PASSWORD=N''myPassword'',
DEFAULT_LANGUAGE=[us_english],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF
GO
Entiendo que necesito interrogar a una base de datos del sistema, ¡pero no estoy seguro por dónde empezar!
Como una pequeña adición a este hilo, en general, desea evitar el uso de las vistas que comienzan con sys.sys *, ya que Microsoft solo las incluye para compatibilidad con versiones anteriores. Para su código, probablemente debería usar sys.server_principals. Esto supone que estás usando SQL 2005 o superior.
De here
If not Exists (select loginname from master.dbo.syslogins
where name = @loginName and dbname = ''PUBS'')
Begin
Select @SqlStatement = ''CREATE LOGIN '' + QUOTENAME(@loginName) + ''
FROM WINDOWS WITH DEFAULT_DATABASE=[PUBS], DEFAULT_LANGUAGE=[us_english]'')
EXEC sp_executesql @SqlStatement
End
En primer lugar, debe verificar la existencia de inicio de sesión mediante la vista syslogins:
IF NOT EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = ''YourLoginName'')
BEGIN
CREATE LOGIN [YourLoginName] WITH PASSWORD = N''password''
END
Entonces debes verificar la existencia de tu base de datos:
USE your_dbname
IF NOT EXISTS
(SELECT name
FROM sys.database_principals
WHERE name = ''your_dbname'')
BEGIN
CREATE USER [your_dbname] FOR LOGIN [YourLoginName]
END
Esta es una forma de hacerlo en SQL Server 2005 y posteriores sin utilizar la vista de syslogins en desuso:
IF NOT EXISTS
(SELECT name
FROM master.sys.server_principals
WHERE name = ''LoginName'')
BEGIN
CREATE LOGIN [LoginName] WITH PASSWORD = N''password''
END
La vista server_principals se usa en lugar de sql_logins porque esta última no muestra los inicios de sesión de Windows.
Si necesita verificar la existencia de un usuario en una base de datos en particular antes de crearlos, puede hacer esto:
USE your_db_name
IF NOT EXISTS
(SELECT name
FROM sys.database_principals
WHERE name = ''Bob'')
BEGIN
CREATE USER [Bob] FOR LOGIN [Bob]
END
Esto es para Azure SQL:
IF (EXISTS(SELECT TOP 1 1 FROM sys.sql_logins WHERE [name] = ''<login>''))
DROP LOGIN [<login>];
Fuente: cómo comprobar si el usuario de la base de datos ya existe en la base de datos SQL de Azure
Esto funciona en SQL Server 2000.
use master
select count(*) From sysxlogins WHERE NAME = ''myUsername''
en SQL 2005, cambie la segunda línea a
select count(*) From syslogins WHERE NAME = ''myUsername''
No estoy seguro acerca de SQL 2008, pero supongo que será lo mismo que SQL 2005 y si no, esto debería darle una idea de dónde empezar a buscar.
Pruebe esto (reemplace ''usuario'' con el nombre de inicio de sesión real):
IF NOT EXISTS(
SELECT name
FROM [master].[sys].[syslogins]
WHERE NAME = ''user'')
BEGIN
--create login here
END
Puede usar la función incorporada:
SUSER_ID ( [ ''myUsername'' ] )
vía
IF [value] IS NULL [statement]
me gusta:
IF SUSER_ID (N''myUsername'') IS NULL
CREATE LOGIN [myUsername] WITH PASSWORD=N''myPassword'',
DEFAULT_LANGUAGE=[us_english],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF
GO
https://technet.microsoft.com/en-us/library/ms176042(v=sql.110).aspx