Ash*_*shu 87 sql database sql-server
我想编写一个脚本来在SQL Server Express中创建admin用户(带abcd密码).另外,我想为此用户分配admin完整权限.
Mar*_*ham 181
根据您的问题,我认为您可能对用户和登录之间的区别感到困惑.一个登录的是SQL Server作为一个整体上的账户-有人谁是能够登录到服务器,谁拥有一个密码.一个用户是一个登录访问到特定的数据库.
创建登录很简单,必须(显然)在为特定数据库中的登录创建用户帐户之前完成:
CREATE LOGIN NewAdminName WITH PASSWORD = 'ABCD'
GO
Run Code Online (Sandbox Code Playgroud)
以下是使用刚才声明的Login创建具有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
Run Code Online (Sandbox Code Playgroud)
现在,登录比我看起来更加流畅.例如,安装数据库时,将自动为Windows Administrator帐户创建登录帐户(在大多数SQL Server安装中).在大多数情况下,我只是在管理数据库时使用它(它具有所有权限).
但是,如果要从应用程序访问SQL Server,则需要将服务器设置为"混合模式"(Windows和SQL登录)并创建登录,如上所示.然后,您将根据应用程序所需的内容"授予"SQL登录权限.有关更多信息,请参见此处
更新:Aaron指出使用sp_addsrvrolemember为您的登录帐户分配一个准备好的角色.这是一个好主意 - 比手动授予权限更快更容易.如果你google它,你会看到很多链接.但是,您仍必须了解登录和用户之间的区别.
Aar*_*and 29
整个服务器或特定数据库的完全管理员权限?我认为其他人回答了数据库,但对于服务器:
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';
Run Code Online (Sandbox Code Playgroud)
您可能需要取消CHECK_参数,具体取决于您使用的SQL Server Express版本(在您的问题中包含此信息几乎总是有用的).
您可以使用:
CREATE LOGIN <login name> WITH PASSWORD = '<password>' ; GO
Run Code Online (Sandbox Code Playgroud)
创建登录(请参阅此处了解更多详细信息)。
那么你可能需要使用:
CREATE USER user_name
Run Code Online (Sandbox Code Playgroud)
要创建与特定数据库的登录名关联的用户,您也希望授予他们访问权限。
(详情请看这里)
您还可以使用:
GRANT permission [ ,...n ] ON SCHEMA :: schema_name
Run Code Online (Sandbox Code Playgroud)
为您分配给用户的架构设置权限。
(详情请看这里)
您可能会发现有用的另外两个命令是ALTER USER和ALTER LOGIN。
如果要创建通用脚本,可以使用带有用户名和数据库名称替换的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)
Run Code Online (Sandbox Code Playgroud)