Подтвердить что ты не робот

TSQL для привязки пользователей к базе данных

Таким образом, я не могу использовать этот менеджер для пользователей... Если бы я был, я бы даже не задавал этот вопрос. Поэтому мне интересно, есть ли способ через TSQL выполнить команду, которая отображает пользователя в конкретную базу данных и предоставляет им разрешения владельца.

Спасибо...

4b9b3361

Ответ 1

Измените базу данных по умолчанию для входа в систему:

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>;

Ответ 2

Официально вы хотите создать пользователя базы данных, который сопоставляется с именем входа. Для этого вы должны использовать:

Create User <username> For LOGIN <loginname>

Это, очевидно, требует наличия логина. После этого вы должны позвонить:

exec sp_addrolemember 'db_owner', <username>

Это предполагает, что учетная запись, с которой вы подключаетесь к базе данных, имеет привилегии для добавления членов в роль db_owner.

Ответ 3

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

Ответ 5

Мое полное решение для 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 

с помощью: Создать на сервере SQL. Вход с разрешениями sysadmin: 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");

Ответ 6

Конечно, обычно вы не хотите предоставлять разрешения владельца пользователям. Это то, что те из нас в мире DBA называют "Плохая вещь".