【问题标题】:SQL Server Script to create a new user用于创建新用户的 SQL Server 脚本
【发布时间】:2010-12-08 17:47:36
【问题描述】:

我想编写一个脚本来在 SQL Server Express 中创建一个 admin 用户(使用 abcd 密码)。 我还想为这个用户分配admin 全部权限。

【问题讨论】:

    标签: sql sql-server database


    【解决方案1】:

    根据您的问题,我认为您可能对 UserLogin 之间的区别有些困惑。 Login 是整个 SQL Server 上的帐户 - 能够登录到服务器并拥有密码的人。 User 是一个Login,可以访问特定的数据库。

    创建 Login 很容易,并且必须(显然)在为特定数据库中的登录创建 User 帐户之前完成:

    CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
    GO
    

    以下是您如何使用您刚刚声明的登录 创建具有 db_owner 权限的 用户

    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
    

    现在,登录 比我上面说的要流畅一些。例如,安装数据库时会自动为 Windows 管理员帐户创建登录帐户(在大多数 SQL Server 安装中)。在大多数情况下,我只是在管理数据库时使用它(它具有所有权限)。

    但是,如果您要从应用程序访问 SQL Server,那么您需要将服务器设置为“混合模式”(Windows 和 SQL 登录)并创建一个如上所示的登录。然后,您将根据您的应用程序所需的内容“授予”该 SQL 登录的权限。请参阅here 了解更多信息。

    更新:Aaron 指出使用 sp_addsrvrolemember 将准备好的角色分配给您的登录帐户。这是一个好主意 - 比手动授予权限更快、更容易。如果你谷歌它,你会看到很多链接。但是,您仍然必须了解登录和用户之间的区别。

    【讨论】:

    • 正是我需要的,谢谢。我没想到它会如此简单 - 并且可以完美运行!
    【解决方案2】:

    整个服务器或特定数据库的完全管理员权限?我认为其他人回答了数据库,但回答了服务器:

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

    您可能需要省略 CHECK_ 参数,具体取决于您使用的 SQL Server Express 版本(在您的问题中包含此信息几乎总是有用)。

    【讨论】:

    • 正是我想要的我正在尝试使用 Microsoft.SqlServer.Management.Smo.Login 类使用 c# 创建登录。但我无法创建。这适用于 c# 中的简单代码谢谢
    【解决方案3】:

    如果你想创建一个通用脚本,你可以用一个 Execute 语句来做,用你的用户名和数据库名称替换

    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)
    

    【讨论】:

    • 我无意中否决了这个答案,但现在我无法在不编辑的情况下撤消我的否决。我放垃圾短信只是为了删除我的反对票,但现在我既不能删除垃圾短信也不能删除反对票......对不起
    【解决方案4】:

    你可以使用:

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

    创建登录(有关详细信息,请参阅here)。

    那么你可能需要使用:

    CREATE USER user_name 
    

    要创建与您要授予他们访问权限的特定数据库的登录关联的用户。

    (详见here

    你也可以使用:

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

    为您分配给用户的架构设置权限。

    (详见here

    您可能会发现另外两个有用的命令是 ALTER USERALTER LOGIN

    【讨论】:

      【解决方案5】:
      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
      

      这全面帮助您使用网络:

      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
      

      【讨论】:

        【解决方案6】:

        上周我在我的开发盒上安装了 Microsoft SQL Server 2014 开发人员版,并立即遇到了我以前从未见过的问题。

        我已经无数次安装了各种版本的 SQL Server,而且通常是一个无痛的过程。安装服务器,运行管理控制台,就这么简单。但是,完成此安装后,当我尝试使用 SSMS 登录服务器时,出现如下错误:

        SQL Server 登录错误 18456 “用户登录失败...(Microsoft SQL Server,错误:18456)” 如果我在登录时输入了错误的密码,我已经习惯了看到这个错误——但这只是在我使用混合模式(Windows 和 SQL 身份验证)的情况下。在这种情况下,服务器只设置了 Windows 身份验证,并且用户帐户是我自己的。我仍然不确定为什么它没有在设置过程中将我的用户添加到 SYSADMIN 角色;也许我错过了一步而忘记添加它。无论如何,并不是所有的希望都破灭了。

        如果您无法使用任何其他帐户登录 SQL Server,解决此问题的方法是通过命令行界面添加您的网络登录。为此,您需要成为所登录 PC 的 Windows 管理员。

        停止 MSSQL 服务。 使用以管理员身份运行打开命令提示符。 更改为保存 SQL Server EXE 文件的文件夹; SQL Server 2014 的默认值为“C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn”。 运行以下命令:“sqlservr.exe –m”。这将以单用户模式启动 SQL Server。 在打开此命令提示符的同时,打开另一个命令提示符,重复步骤 2 和 3。 在第二个命令提示符窗口中,运行“SQLCMD –S Server_Name\Instance_Name” 在此窗口中,运行以下行,每行后按 Enter: 1

        从 WINDOWS 创建登录 [域名\登录名] 2 走 3 SP_ADDSRVROLEMEMBER 'LOGIN_NAME','SYSADMIN' 4 走 使用 CTRL+C 在命令提示符窗口中结束这两个进程;系统将提示您按 Y 结束 SQL Server 进程。

        重新启动 MSSQL 服务。 而已!您现在应该可以使用网络登录名登录了。

        【讨论】:

          猜你喜欢
          • 2023-03-15
          • 2012-09-14
          • 1970-01-01
          • 2014-09-05
          • 1970-01-01
          • 1970-01-01
          • 2019-11-17
          • 2014-07-25
          • 2012-08-06
          相关资源
          最近更新 更多