【发布时间】:2010-12-08 17:47:36
【问题描述】:
我想编写一个脚本来在 SQL Server Express 中创建一个 admin 用户(使用 abcd 密码)。
我还想为这个用户分配admin 全部权限。
【问题讨论】:
标签: sql sql-server database
我想编写一个脚本来在 SQL Server Express 中创建一个 admin 用户(使用 abcd 密码)。
我还想为这个用户分配admin 全部权限。
【问题讨论】:
标签: sql sql-server database
根据您的问题,我认为您可能对 User 和 Login 之间的区别有些困惑。 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 将准备好的角色分配给您的登录帐户。这是一个好主意 - 比手动授予权限更快、更容易。如果你谷歌它,你会看到很多链接。但是,您仍然必须了解登录和用户之间的区别。
【讨论】:
整个服务器或特定数据库的完全管理员权限?我认为其他人回答了数据库,但回答了服务器:
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 版本(在您的问题中包含此信息几乎总是有用)。
【讨论】:
如果你想创建一个通用脚本,你可以用一个 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)
【讨论】:
你可以使用:
CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO
创建登录(有关详细信息,请参阅here)。
那么你可能需要使用:
CREATE USER user_name
要创建与您要授予他们访问权限的特定数据库的登录关联的用户。
(详见here)
你也可以使用:
GRANT permission [ ,...n ] ON SCHEMA :: schema_name
为您分配给用户的架构设置权限。
(详见here)
您可能会发现另外两个有用的命令是 ALTER USER 和 ALTER LOGIN。
【讨论】:
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
【讨论】:
上周我在我的开发盒上安装了 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 服务。 而已!您现在应该可以使用网络登录名登录了。
【讨论】: