2010-05-05 23 views
36

Así que no puedo usar el administrador de empresa para hacer esto ... Si fuera así, ni siquiera estaría haciendo esta pregunta. Así que me pregunto si hay una manera a través de TSQL para ejecutar un comando que asigna un usuario a una base de datos en particular y les otorga permisos 'propietario'.TSQL para asignar usuario a la base de datos

Gracias ...

Respuesta

74

Cambio de base de datos por defecto de un inicio de sesión:

alter login <loginname> with default_database = <dbname>; 

Crear un usuario en una base de datos para una entrada dada:

use <dbname>; 
create user <username> from login <loginname>; 

Hacer una miembro de usuario del grupo db_owner:

use <dbname> 
exec sp_addrolemember 'db_owner', '<username>'; 

Hacer un inicio de sesión 'dbo' de una base de datos:

alter authorization on database::<dbname> to <loginname>; 
11

Oficialmente, que desea crear un usuario de base de datos que está asignado a un inicio de sesión. Para hacer eso, usaría:

Create User <username> For LOGIN <loginname> 

Esto obviamente requiere que el inicio de sesión exista. Después de que usted entonces llamar:

exec sp_addrolemember 'db_owner', <username> 

Esto supone que la cuenta con la que se está conectando a la base de datos tiene privilegios para agregar miembros a la función db_owner.

6
USE [YourDB] 
GO 
CREATE USER [xyx] FOR LOGIN [xyz] 
GO 
ALTER USER [xyz] WITH DEFAULT_SCHEMA=[dbo] 
GO 
EXEC sp_addrolemember N'db_owner', N'xyz' 
GO 
-4

Por supuesto, normalmente, no desea conceder permisos de propietario a los usuarios. Esto es lo que aquellos de nosotros en el mundo de DBA llamamos "Una cosa mala".

0

Mi solución completa para SQL. Se puede personalizar según sus necesidades:

#region SQL-SERVER-FUNCTION 
    /// <summary> 
    /// Assign User in to specific role for SQL server database 
    /// </summary> 
    /// <param name="Server">Server address - example: yourServer.cloudapp.net,1433</param>   
    /// <param name="UserID">User name with sysadmin role</param> 
    /// <param name="Database">User database</param> 
    /// <param name="Role">New role for this user</param> 
    /// <param name="UserToRole">User assigned to new role</param> 
    public static void AddUserToRoles(string Server, string UserID, string Password, string Database, string Role, string UserToRole) 
    {    
     SqlConnection connection = new SqlConnection(); 
     connection.ConnectionString = "SERVER = " + Server + "; DATABASE = " + Database + " ; User ID = " + UserID + "; Pwd = " + Password;    
     string sqlCreateDBQuery = " EXEC sp_addrolemember '" + Role + "', " + UserToRole; 
     SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, connection); 
     try 
     { 
      connection.Open(); 
      myCommand.ExecuteNonQuery(); 
     } 
     catch{}//(System.Exception ex) 
     finally 
     { 
      connection.Close(); 
     } 
     return; 
    } 

    /// <summary> 
    /// Create new User in specified database base on Login in SQL server 
    /// </summary> 
    /// <param name="Server">Server address - example: yourServer.cloudapp.net,1433</param>   
    /// <param name="UserID">User name with sysadmin role</param> 
    /// <param name="Database">Database for created user</param> 
    /// <param name="NewUser">New user Name</param> 
    /// <param name="FromLogin">Create user base on this SQL server login</param> 
    public static void CreateUserInDatabase(string Server, string UserID, string Password, string Database, string NewUser, string FromLogin) 
    { 
     SqlConnection connection = new SqlConnection(); 
     connection.ConnectionString = "SERVER = " + Server + "; DATABASE = "+ Database + " ; User ID = " + UserID + "; Pwd = " + Password; 
     string sqlCreateDBQuery = "CREATE USER " + NewUser + " FROM LOGIN " + FromLogin;   
     SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, connection); 
     try 
     { 
      connection.Open(); 
      myCommand.ExecuteNonQuery(); 
     } 
     catch { }//(System.Exception ex) 
     finally 
     { 
      connection.Close(); 
     } 
     return; 
    } 

    /// <summary> 
    /// Create new Login in SQL server 
    /// </summary> 
    /// <param name="Server">Server address - example: yourServer.cloudapp.net,1433</param>   
    /// <param name="UserID">User name with sysadmin role</param> 
    /// <param name="Password">Sysadmin user password</param> 
    /// <param name="NewLoginName">New Login Name</param> 
    /// <param name="NewLoginPassword">Password for new Login</param>    
    public static void CreateLoginInSqlServer(string Server, string UserID, string Password, string NewLoginName, string NewLoginPassword) 
    { 
     SqlConnection connection = new SqlConnection(); 
     connection.ConnectionString = "SERVER = " + Server + "; DATABASE = master; User ID = " + UserID + "; Pwd = " + Password; 
     string sqlCreateDBQuery = "CREATE LOGIN [" + NewLoginName + "] WITH PASSWORD='"+ NewLoginPassword +"' " +    
      ", CHECK_POLICY=OFF, DEFAULT_DATABASE=db_crs_0002, DEFAULT_LANGUAGE=[English];";   
     SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, connection); 
     try 
     { 
      connection.Open(); 
      myCommand.ExecuteNonQuery(); 
     } 
     catch { }//(System.Exception ex) 
     finally 
     { 
      connection.Close(); 
     } 
     return; 
    } 


    /// <summary> 
    /// Create new empty database on SQL server base on model database stored in SQL server 
    /// </summary> 
    /// <param name="Server">Server address - example: yourServer.cloudapp.net,1433</param> 
    /// <param name="NewDatabaseName">Name for new database</param> 
    /// <param name="UserID">User name with sysadmin role</param> 
    /// <param name="Password">Sysadmin user password</param> 
    public static void CreateNewDatabaseSqlserver(string Server, string NewDatabaseName, string UserID, string Password)     
    { 
     string sqlCreateDBQuery = " CREATE DATABASE " + NewDatabaseName; 
     SqlConnection connection = new SqlConnection(); 
     connection.ConnectionString = "SERVER = " + Server + "; DATABASE = master; User ID = " + UserID + "; Pwd = " + Password; 
     SqlCommand myCommand = new SqlCommand(sqlCreateDBQuery, connection); 
     try 
     { 
      connection.Open(); 
      myCommand.ExecuteNonQuery(); 
     } 
     catch { }//(System.Exception ex) 
     finally 
     { 
      connection.Close(); 
     } 
     return; 
    } 
    #endregion 

usando: crear en el servidor SQL de sesión con permisos de administrador de sistemas: AdminAPI

 SQLserverAPI.CreateNewDatabaseSqlserver("yourServer.cloudapp.net,1433", "databaseName", "AdminAPI", "password*"); 
     SQLserverAPI.CreateLoginInSqlServer("yourServer.cloudapp.net,1433", "AdminAPI", "password*", "My_Login", "password*"); 
     SQLserverAPI.CreateUserInDatabase("yourServer.cloudapp.net,1433", "AdminAPI", "password*", "databaseName", "User1", "My_Login"); 
     SQLserverAPI.AddUserToRoles("yourServer.cloudapp.net,1433", "AdminAPI", "password*", "databaseName", "db_datareader", "User1"); 
     SQLserverAPI.AddUserToRoles("yourServer.cloudapp.net,1433", "AdminAPI", "password*", "databaseName", "db_datawriter", "User1"); 
     SQLserverAPI.AddUserToRoles("yourServer.cloudapp.net,1433", "AdminAPI", "password*", "databaseName", "db_owner", "User1"); 
Cuestiones relacionadas