Appearance
SQL Server 跨数据库所有权链接
假设有两个数据库:DB1 和 DB2,它们在同一个服务器实例上。在 DB1 中,有一个视图 View1,它引用了 DB2 中的表 Tbl2。我们希望 User1 拥有 View1 的 SELECT 权限,但不允许他访问 Tbl2。
若我们直接授予 User1 对 View1 的 SELECT 权限,但是不开放 Tbl2 的 SELECT 权限,则当 User1 查询 View1 时,SQL Server 将会提示:
Text
消息 229,级别 14,状态 5,第 1 行
拒绝了对对象 'Tbl2' (数据库 'DB2',架构 'dbo')的 SELECT 权限。1
2
2
此时我们可以通过打开 DB1、DB2 的 DB_CHAINING(跨数据库所有权链接)选项,使得我们可以在不开放 Tbl2 访问权限的情况下,让 User1 可以通过 View1 访问 Tbl2 中的数据。
查询
DB_CHAINING选项是否打开:SQLSELECT name AS dbname, is_db_chaining_on FROM sys.databases;打开
DB_CHAINING选项:SQLUSE dbname; GO ALTER DATABASE dbname SET DB_CHAINING ON;1
2
3
4