如何为多个数据库编写用户权限脚本
How to script user authority for multiple databases
我正在创建一个可以访问 2 个 SQL Server 2014 数据库的网站。
我有点菜鸟 - 我以前只授予过一个数据库的访问权限,我使用这个脚本:
USE [master]
GO
IF EXISTS(SELECT * FROM sys.syslogins WHERE name = N'MyUser')
DROP LOGIN [MyUser];
GO
CREATE LOGIN [MyUser]
WITH
PASSWORD=N'******',
DEFAULT_DATABASE=[MyDatabase],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
-- Drop & recreate db-user
USE [MyDatabase]
GO
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'MyUser')
DROP USER [MyUser];
GO
CREATE USER [MyUser] FOR LOGIN [MyUser]
GO
EXEC sp_addrolemember N'db_owner', N'MyUser'
GO
但是,当我 运行 第二个数据库上的脚本时,我无法访问第一个数据库。如果我创建 2 个不同的用户,我可以访问两者。
那么,一个问题 - 我需要对这个脚本做些什么才能保留对多个数据库的访问权限?
脚本中的第一段代码删除来自服务器的登录(如果已经存在)。因此,如果您 运行 整个脚本两次,它将创建登录名、创建数据库用户(并将其关联到登录名),然后在第二次迭代开始时 drop/re-create 登录名.
如果您需要将此登录名添加为第二个数据库中的用户,您需要做的就是为任何其他数据库执行脚本的后半部分。 (尽管正如评论中提到的那样,使用 SQL Server Management Studio 在 UI 中执行此操作要容易得多。)
我正在创建一个可以访问 2 个 SQL Server 2014 数据库的网站。
我有点菜鸟 - 我以前只授予过一个数据库的访问权限,我使用这个脚本:
USE [master]
GO
IF EXISTS(SELECT * FROM sys.syslogins WHERE name = N'MyUser')
DROP LOGIN [MyUser];
GO
CREATE LOGIN [MyUser]
WITH
PASSWORD=N'******',
DEFAULT_DATABASE=[MyDatabase],
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
-- Drop & recreate db-user
USE [MyDatabase]
GO
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'MyUser')
DROP USER [MyUser];
GO
CREATE USER [MyUser] FOR LOGIN [MyUser]
GO
EXEC sp_addrolemember N'db_owner', N'MyUser'
GO
但是,当我 运行 第二个数据库上的脚本时,我无法访问第一个数据库。如果我创建 2 个不同的用户,我可以访问两者。
那么,一个问题 - 我需要对这个脚本做些什么才能保留对多个数据库的访问权限?
脚本中的第一段代码删除来自服务器的登录(如果已经存在)。因此,如果您 运行 整个脚本两次,它将创建登录名、创建数据库用户(并将其关联到登录名),然后在第二次迭代开始时 drop/re-create 登录名.
如果您需要将此登录名添加为第二个数据库中的用户,您需要做的就是为任何其他数据库执行脚本的后半部分。 (尽管正如评论中提到的那样,使用 SQL Server Management Studio 在 UI 中执行此操作要容易得多。)