2010-05-05 100 views
36

因此,我無法使用企業管理器來執行此操作......如果我是我,我甚至不會問這個問題。所以我想知道是否有通過TSQL執行命令將用戶映射到特定數據庫並授予他們「所有者」權限的方法。TSQL將用戶映射到數據庫

謝謝...

回答

74

更改默認的數據庫:

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

對於一個給定的登錄在數據庫中創建一個用戶:

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

製作的db_owner組的用戶成員:

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

進行數據庫登錄'dbo':

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

正式,你想創建一個映射到一個登錄的數據庫用戶。要做到這一點,你可以使用:

Create User <username> For LOGIN <loginname> 

這顯然要求登錄存在。之後,你會再調用:

exec sp_addrolemember 'db_owner', <username> 

這假設與您正在連接到數據庫的帳戶有權限的成員添加到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

當然,通常情況下,您不希望授予用戶所有者權限。這就是我們DBA世界中的那些人所說的「一件壞事」。

0

我對SQL的完整解決方案。

#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 

使用: 具有sysadmin權限創建的SQL Server登錄: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"); 
您可以根據您的需求進行定製