`
bolutes
  • 浏览: 869470 次
文章分类
社区版块
存档分类
最新评论

启用 SQL Server 中的跨数据库访问

 
阅读更多

当某个数据库中的某一过程依赖另一个数据库中的对象时,会发生跨数据库所有权链接。 跨数据库所有权链与单个数据库中的所有权链接的工作方式相同,不同之处在于完整的所有权链要求将所有对象拥有者映射为同一登录帐户。 如果同一登录帐户拥有源数据库中的源对象和目标数据库中的目标对象,则 SQL Server 不会检查对目标对象的权限。

默认情况下为关


SQL 2000 SP3 开始,跨数据库的所有权链接默认情况下为关。 Microsoft 建议禁用跨数据库所有权链接,因为它会使您面临以下安全风险:

· 数据库所有者和 db_ddladmin 成员或 db_owners 数据库角色可创建其他用户所拥有的对象。 这些对象的目标可能是其他数据库中的对象。 这表示如果启用跨数据库所有权链接,您必须完全信任在所有数据库中具有数据的这些用户。

· 具有 CREATE DATABASE 权限的用户可创建新数据库以及附加现有数据库。 如果启用了跨数据库所有权链接,则这些用户可以从新创建的或他们创建的附加数据库中访问他们在其中没有权限的其他数据库中的对象。

启用跨数据库所有权链接


只能在完全信任高级权限用户的环境中启用跨数据库所有权链接。 可在设置所有数据库,或使用 Transact-SQL 命令 sp_configure sp_dboption 选择性地设置特定数据库期间,配置跨数据库所有权链接。

SQL Server 2000 SP3 引入了 Cross DB Ownership Chaining 选项作为一项安全增强功能,它可允许您配置跨数据库所有权链接。 若要选择性地配置 SQL Server 2005 或更高版本中的跨数据库所有权链接,但该链接对于服务器未打开,请使用 sp_configure 打开该链接。 然后,使用包含 SET DB_CHAINING ON ALTER DATABASE 命令仅为需要跨数据库所有权链接的数据库配置跨数据库所有权链接

动态 SQL

在执行了动态创建的 SQL 语句的情况下跨数据库所有权链接将不起作用,除非同一用户同时存在于两个数据库中。 您可以通过创建访问另一数据库中数据的存储过程并使用存在于两个数据库中的证书对过程签名,在 SQL Server 2005 中解决此问题。 这可为用户提供访问该过程所使用的数据库资源的权限,而不必向他们授予数据库访问权或权限。

以上内容转自:http://msdn.microsoft.com/zh-cn/library/bb669059.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics