Script de SQL Server para crear un nuevo usuario

99

Quiero escribir un script para crear un adminusuario (con abcdcontraseña) en SQL Server Express. También quiero asignar admintodos los derechos a este usuario .

Ashish Ashu
fuente

Respuestas:

198

Según su pregunta, creo que puede estar un poco confundido acerca de la diferencia entre un usuario y un inicio de sesión . Un inicio de sesión es una cuenta en el servidor SQL en su conjunto: alguien que puede iniciar sesión en el servidor y que tiene una contraseña. Un usuario es un inicio de sesión con acceso a una base de datos específica.

Crear un inicio de sesión es fácil y (obviamente) debe hacerse antes de crear una cuenta de usuario para el inicio de sesión en una base de datos específica:

CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO

Así es como puede crear un usuario con privilegios db_owner utilizando el inicio de sesión que acaba de declarar:

Use YourDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'NewAdminName')
BEGIN
    CREATE USER [NewAdminName] FOR LOGIN [NewAdminName]
    EXEC sp_addrolemember N'db_owner', N'NewAdminName'
END;
GO

Ahora, inicios de sesión son un poco más fluidos de lo que hago parecer arriba. Por ejemplo, una cuenta de inicio de sesión se crea automáticamente (en la mayoría de las instalaciones de SQL Server) para la cuenta de administrador de Windows cuando se instala la base de datos. En la mayoría de las situaciones, solo lo uso cuando estoy administrando una base de datos (tiene todos los privilegios).

Sin embargo, si va a acceder a SQL Server desde una aplicación, entonces querrá configurar el servidor para "Modo mixto" (inicios de sesión de Windows y SQL) y crear un inicio de sesión como se muestra arriba. A continuación, "OTORGARÁ" privilegios a ese inicio de sesión SQL en función de lo que se necesite para su aplicación. Consulte aquí para obtener más información.

ACTUALIZACIÓN: Aaron señala el uso de sp_addsrvrolemember para asignar un rol preparado a su cuenta de inicio de sesión. Esta es una buena idea, más rápida y fácil que otorgar privilegios manualmente. Si lo busca en Google, verá muchos enlaces. Sin embargo, aún debe comprender la distinción entre un inicio de sesión y un usuario.

Mark Brittingham
fuente
1
Exactamente lo que necesitaba, gracias. No esperaba que fuera tan fácil, ¡y que funcionara perfectamente!
Dave
33

¿Derechos de administrador completos para todo el servidor o una base de datos específica? Creo que los demás respondieron por una base de datos, pero por el servidor:

USE [master];
GO
CREATE LOGIN MyNewAdminUser 
    WITH PASSWORD    = N'abcd',
    CHECK_POLICY     = OFF,
    CHECK_EXPIRATION = OFF;
GO
EXEC sp_addsrvrolemember 
    @loginame = N'MyNewAdminUser', 
    @rolename = N'sysadmin';

Es posible que deba omitir los parámetros CHECK_ según la versión de SQL Server Express que esté utilizando (casi siempre es útil incluir esta información en su pregunta).

Aaron Bertrand
fuente
Exactamente lo que quiero Estaba tratando de crear un inicio de sesión con c # usando la clase Microsoft.SqlServer.Management.Smo.Login. pero no pude crear. esto funciona con código simple en c # gracias
kordiseps
6

Si desea crear un script genérico, puede hacerlo con una instrucción Ejecutar con un Reemplazo con su nombre de usuario y el nombre de la base de datos

Declare @userName as varchar(50); 
Declare @defaultDataBaseName as varchar(50);
Declare @LoginCreationScript as varchar(max);
Declare @UserCreationScript as varchar(max);
Declare @TempUserCreationScript as varchar(max);
set @defaultDataBaseName = 'data1';
set @userName = 'domain\userName';
set @LoginCreationScript ='CREATE LOGIN [{userName}]
FROM WINDOWS 
WITH DEFAULT_DATABASE ={dataBaseName}'

set @UserCreationScript ='
USE {dataBaseName}
CREATE User [{userName}] for LOGIN [{userName}];
EXEC sp_addrolemember ''db_datareader'', ''{userName}'';
EXEC sp_addrolemember ''db_datawriter'', ''{userName}'';
Grant Execute on Schema :: dbo TO [{userName}];'
/*Login creation*/
set @LoginCreationScript=Replace(Replace(@LoginCreationScript, '{userName}', @userName), '{dataBaseName}', @defaultDataBaseName)
set @UserCreationScript =Replace(@UserCreationScript, '{userName}', @userName)
Execute(@LoginCreationScript)

/*User creation and role assignment*/
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', @defaultDataBaseName)
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db2')
Execute(@TempUserCreationScript)
set @TempUserCreationScript =Replace(@UserCreationScript, '{dataBaseName}', 'db3')
Execute(@TempUserCreationScript)
Guish
fuente
Sin querer, he votado en contra de esta respuesta, pero ahora no puedo deshacer mi voto en contra sin editar. He puesto texto basura solo para eliminar mi voto negativo, pero ahora no puedo eliminar ni el texto basura ni el
voto negativo
4

Puedes usar:

CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO 

Para crear el inicio de sesión (consulte aquí para obtener más detalles).

Entonces es posible que deba usar:

CREATE USER user_name 

Para crear el usuario asociado con el inicio de sesión para la base de datos específica, también desea otorgarles acceso.

(Vea aquí para más detalles)

También puedes usar:

GRANT permission  [ ,...n ] ON SCHEMA :: schema_name

Para configurar los permisos para los esquemas a los que asignó los usuarios.

(Vea aquí para más detalles)

Otros dos comandos que pueden resultarle útiles son ALTER USER y ALTER LOGIN .

Simon P Stevens
fuente
2
CREATE LOGIN AdminLOGIN WITH PASSWORD = 'pass'
GO


Use MyDatabase;
GO

IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'AdminLOGIN')
BEGIN
    CREATE USER [AdminLOGIN] FOR LOGIN [AdminLOGIN]
    EXEC sp_addrolemember N'db_owner', N'AdminLOGIN'
    EXEC master..sp_addsrvrolemember @loginame = N'adminlogin', @rolename = N'sysadmin'
END;
GO

esta completa ayuda para el uso de la red:

1- Right-click on SQL Server instance at root of Object Explorer, click on Properties
Select Security from the left pane.

2- Select the SQL Server and Windows Authentication mode radio button, and click OK.

3- Right-click on the SQL Server instance, select Restart (alternatively, open up Services and restart the SQL Server service).

4- Close sql server application and reopen it

5- open 'SQL Server Configuration Manager' and tcp enabled for network

6-Double-click the TCP/IP protocol, go to the IP Addresses tab and scroll down to the IPAll section.

7-Specify the 1433 in the TCP Port field (or another port if 1433 is used by another MSSQL Server) and press the OK 

8-Open in Sql Server: Security And Login  And Right Click on Login Name And Select Peroperties And Select Server Roles And 
  Checked The Sysadmin And Bulkadmin then Ok.
9-firewall: Open cmd as administrator and type: 
      netsh firewall set portopening protocol = TCP port = 1433 name = SQLPort mode = ENABLE scope = SUBNET profile = CURRENT
Ali asghar Fendereski
fuente
0

La semana pasada instalé Microsoft SQL Server 2014 Developer Edition en mi caja de desarrollo e inmediatamente encontré un problema que nunca antes había visto.

He instalado varias versiones de SQL Server innumerables veces y, por lo general, es un procedimiento indoloro. Instale el servidor, ejecute la Consola de administración, así de simple. Sin embargo, después de completar esta instalación, cuando intenté iniciar sesión en el servidor usando SSMS, recibí un error como el siguiente:

Error de inicio de sesión de SQL Server 18456 "Error de inicio de sesión para el usuario ... (Microsoft SQL Server, Error: 18456)" Estoy acostumbrado a ver este error si escribo la contraseña incorrecta al iniciar sesión, pero eso es solo si estoy usando el modo mixto ( Autenticación de Windows y SQL). En este caso, el servidor se configuró solo con autenticación de Windows y la cuenta de usuario era la mía. Todavía no estoy seguro de por qué no agregó a mi usuario al rol SYSADMIN durante la configuración; tal vez perdí un paso y olvidé agregarlo. En cualquier caso, no se perdió toda esperanza.

La forma de solucionar este problema, si no puede iniciar sesión con ninguna otra cuenta en SQL Server, es agregar su inicio de sesión de red a través de una interfaz de línea de comandos. Para que esto funcione, debe ser un administrador en Windows para la PC en la que está conectado.

Detenga el servicio MSSQL. Abra un símbolo del sistema utilizando Ejecutar como administrador. Cambie a la carpeta que contiene el archivo EXE de SQL Server; el valor predeterminado para SQL Server 2014 es "C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Binn". Ejecute el siguiente comando: “sqlservr.exe –m”. Esto iniciará SQL Server en modo de usuario único. Mientras deja este símbolo del sistema abierto, abra otro, repitiendo los pasos 2 y 3. En la segunda ventana del símbolo del sistema, ejecute “SQLCMD –S Server_Name \ Instance_Name” En esta ventana, ejecute las siguientes líneas, presionando Enter después de cada una: 1

CREAR INICIO DE SESIÓN [nombre de dominio \ nombre de inicio de sesión] DESDE WINDOWS 2 GO 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME', 'SYSADMIN' 4 GO Utilice CTRL + C para finalizar ambos procesos en las ventanas del símbolo del sistema; se le pedirá que presione Y para finalizar el proceso de SQL Server.

Reinicie el servicio MSSQL. ¡Eso es! Ahora debería poder iniciar sesión con su inicio de sesión de red.

Mohammad shahnawaz
fuente