【问题标题】:Script a user to a specific database?将用户脚本写入特定数据库?
【发布时间】:2011-11-06 02:16:48
【问题描述】:

我正在编写我的 SQL 部署脚本。

我有一个名为“User123”的登录名,我已添加到我当前的数据库中,但我有一个将信息记录到 MyDB 的存储过程,我需要 MyDB 的 User123 权限,所以我在 MyDB 上创建了一个具有权限的用户,但是如何我是否要编写脚本而不是手动添加用户..

到目前为止我有这个,但似乎无法弄清楚如何将它添加到另一个数据库,“MyDB”可以硬编码,因为每台服务器上只有 1 个,但是我不能硬编码当前数据库我运行脚本

如果不存在(SELECT * FROM sys.database_principals WHERE name = N'User123') 开始 使用 DEFAULT_SCHEMA=[dbo] 为登录 [User123] 创建用户 [User123] 结尾 走

这只能在当前数据库上运行,我如何让它在其他数据库上运行。

例子..

我的数据库
安全
用户123

DB1
安全
用户123

我想要一个将用户添加到当前数据库和“MyDB”的脚本,而无需手动切换数据库

【问题讨论】:

  • 我通常使用 INSERT INTO sys.database_pricipals WHERE name=N'user123' 只是将插入插入行两次,每个数据库一次?也许我误解了这个问题?
  • @JohnnyCraig:同样的 USE 是否仍然有用?或者至少 INSERT 必须是完全合格的 - 即。 INSERT INTO MyDB.sys.database_principals... 但问题是,当您使用 INSERT 方法时,是否所有字段都已正确设置。你验证了吗?

标签: sql-server database roles login-script


【解决方案1】:

怎么样:

USE MyDB
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'User123')
BEGIN
   CREATE USER [User123] FOR LOGIN [User123] WITH DEFAULT_SCHEMA=[dbo]
END
GO

USE DB1
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = N'User123')
BEGIN
   CREATE USER [User123] FOR LOGIN [User123] WITH DEFAULT_SCHEMA=[dbo]
END
GO

【讨论】:

  • MSDN 也有像这样切换数据库的示例。 msdn.microsoft.com/en-us/library/ms173463.aspx@LeeHull 如果“必须手动切换数据库”是指不使用“USE [DB NAME]”,那么我相信您可以编写一个脚本来为您自动执行此操作。
猜你喜欢
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多