如何为多个数据库编写用户权限脚本

时间:2016-02-23 15:27:08

标签: sql sql-server sql-server-2014

我正在创建一个可以访问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个不同的用户,我可以访问这两个用户。

所以,一个问题 - 我需要对这个脚本做些什么才能保留多个数据库的访问权限?

1 个答案:

答案 0 :(得分:2)

如果脚本已经存在,则脚本中的第一个代码块会从服务器中删除登录。因此,如果您运行整个脚本两次,它将创建登录,创建数据库用户(并将其与登录关联),然后在第二次迭代开始时删除/重新创建登录。 / p>

如果您需要以第二个数据库中的用户身份添加此登录名,您需要做的就是为任何其他数据库执行脚本的后半部分。 (虽然在评论中提到,使用SQL Server Management Studio在UI中执行此操作要容易得多。)