启用 SQL Server 中的跨数据库访问 (ADO.NET)
更新:November 2007
当某个数据库中的某一过程依赖另一个数据库中的对象时,会发生跨数据库所有权链接。 跨数据库所有权链与单个数据库中的所有权链接的工作方式相同,不同之处在于完整的所有权链要求将所有对象拥有者映射为同一登录帐户。 如果同一登录帐户拥有源数据库中的源对象和目标数据库中的目标对象,则 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 中解决此问题。 这样,用户便可访问过程使用的数据库资源,而不必向用户授予数据库访问权限。
外部资源
有关更多信息,请参见下列资源。
资源 |
说明 |
---|---|
Extending Database Impersonation by Using EXECUTE AS(使用 EXECUTE AS 扩展数据库模拟)和 Cross DB Ownership Chaining Option(跨数据库所有权链接选项)(位于 SQL Server 2008 Books Online(《SQL Server 2008 联机丛书》)中)。 |
这些主题描述如何为 Microsoft SQL Server 2008 实例配置跨数据库所有权链接。 |
Extending Database Impersonation by Using EXECUTE AS(使用 EXECUTE AS 扩展数据库模拟)和 Cross DB Ownership Chaining Option(跨数据库所有权链接选项)(位于 SQL Server 2005 Books Online(《SQL Server 2005 联机丛书》)中)。 |
这些主题描述如何为 Microsoft SQL Server 2005 实例配置跨数据库所有权链接。 |
Cross DB Ownership Chaining(跨数据库所有权链接)(位于 SQL Server 2000 Books Online(《SQL Server 2000 联机丛书》)中)。 |
描述如何使用 SQL Server 2000 SP3 中引入的选项配置跨数据库所有权链接。 |
请参见
概念
使用 SQL Server 中的存储过程管理权限 (ADO.NET)
在 SQL Server 中编写安全动态 SQL (ADO.NET)
在 SQL Server 中为存储过程签名 (ADO.NET)