【问题标题】:SQL user permissions in 2 databases2个数据库中的SQL用户权限
【发布时间】:2013-10-05 09:15:15
【问题描述】:

我有一个场景,我需要允许一个数据库中的用户访问 SAME SQL 服务器上另一个数据库中的对象。

SQL 服务器设置:
我有一个 SQL Server 2008 Express 实例正在运行。

在该实例中,我有以下内容:

2 个数据库:
数据库1
数据库2

2 次登录:
管理员1
管理员2

DATABASE1 有一个在 ADMIN1 上创建的用户 (USER1),并且对 DATABASE1 中的存储过程具有 SELECT、UPDATE、DELETE、INSERT 和 GRANT EXECUTE 权限

DATABASE2 有一个在 ADMIN2 上创建的用户 (USER2),并且对 DATABASE2 中的存储过程具有 SELECT、UPDATE、DELETE、INSERT 和 GRANT EXECUTE 权限

问题:
我需要的是允许 'USER1' SELECT/EXECUTE 对 DATABASE2 中的表和存储过程的权限

我在一些帖子中尝试了一些 SQL 的 sn-ps,但我不知道如何编写 SQL。 我还尝试通过右键单击 Management Studio 中的用户和登录名来手动勾选权限复选框,但是 我需要在我的脚本中执行 SQL。

我的问题的原因
我在 DATABASE1 和 DATABASE2 中有相关的表,但显然我们不能在不同的数据库中创建外键约束。 我们认为处理这两个表之间关系的最好方法是在 DATABASE1 中创建一个存储过程来查询 DATABASE2中的相关表并返回结果。

抱歉,我无法发布任何示例,因为我无法通过搜索找到与我上面描述的场景相匹配的任何示例。 如果我可以提供任何进一步的信息,请告诉我。

非常感谢 凯夫

【问题讨论】:

  • 只是另一个想法.......我在“跨数据库”时看到的。思路 1. 在 Database1 中创建一个引用 Database2 的视图。我会把它放在一个新定义的模式名称下。所以...查询数据库 1(查看 db 2 中的数据),您将拥有“从 OtherDatabasesSchema.vwCounty 中选择 A、B、C ...... Idea2,在 db1 中的代码中使用同义词,并且同义词可以指向数据库 2 中的对象。

标签: sql sql-server sql-server-2008


【解决方案1】:

只要您的用户是在实例级别定义的,您就可以授予他们在每个数据库中所需的任何权限。在 master 下创建您的用户,然后将他们添加为每个数据库的用户,授予他们每个特定数据库所需的任何权限。

编辑更详细(基于 cmets):

首先,您需要创建一个数据库登录。这是一个登录名,然后可以作为用户添加到您实例上的一个或多个数据库中。

这里的详细信息(包括SQL语法):http://technet.microsoft.com/en-us/library/ms189751.aspx

其次,您需要在数据库(Database1、Database2 等)中配置用户。您将希望将这些用户以相同的方式添加到安装的每个产品数据库中。只要用户在那里,您就可以跨实例上的各种数据库进行查询。

这里的详细信息(包括SQL):http://technet.microsoft.com/en-us/library/aa337545.aspx

祝你好运!

【讨论】:

  • 感谢您的快速回复 MystikSpiral。问题是,首先创建 DATABASE1,DATABASE2 用于不同的产品,并且只有在购买产品 2 时才会创建。 DATABASE1 已经在许多客户服务器上,因此已经创建了用户。如果用户已经分配给数据库,有没有一种方法可以编辑他们当前存在的权限?无需在主数据库下重新创建用户?
  • 你没有提到数据库的存在是可变的,这改变了很多事情。您是否可以控制每个数据库的设置?如果这样做,请在部署数据库之前为它们配置正确的权限。
  • 从本质上讲,未来可能会创建一个 DATABASE3 和一个 DATABASE4。即:并非所有数据库都是同时创建的,因此彼此不了解。因此,我需要 DATABASE1 中的 USER1 能够在某种意义上“适应”,以便将来能够读取任何其他数据库。问题是,USER1 存在于 DATABASE1 中。希望能提供更多的见解。谢谢
  • 您需要在单一数据库之上创建一个用户,该用户可以跨越您可能拥有或不拥有的所有这些实体。在你把它做好之前,你将无法让它发挥作用。我可能在此处的翻译中遗漏了某些内容,但根据您分享的内容,这就是它的显示方式。
  • 感谢 mystik- 如果有的话,您能否提供一个解决方案,说明将它们放在哪个系统数据库下?我不知道。如何实现我的问题的解决方案,所以我确实需要帮助来理解我如何根据我的示例来允许要求。如果您可以给我一个所需的任何 sql 示例,我将对其进行测试并将您的答案标记为已接受。非常感谢.. 凯夫
猜你喜欢
  • 2016-01-29
  • 2020-01-26
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 1970-01-01
  • 2011-10-26
  • 2018-03-21
相关资源
最近更新 更多