我知道这个问题是重复的(Grant Select on a view not base table when base table is in a different database),但是我尝试了提出的解决方案,没有任何运气。
我的想法是通过我在其中创建视图的中间数据库来授予对某些数据库中数据的有限访问权限。我这样做是为了避免每次创建视图时都授予对外部表的特定权限。这就是我要做的:
ALTER DATABASE Database_A1 SET DB_CHAINING ON;
ALTER DATABASE Database_A2 SET DB_CHAINING ON;
SELECT is_db_chaining_on, name FROM sys.databases;
我在做错什么吗?我已遵循以下指示:
答案 0 :(得分:1)
您需要在另一个数据库中创建用户(不授予任何权限)。
USE [DATABASE_A2]
GO
CREATE USER [User_B] FOR LOGIN [User_B]
GO
答案 1 :(得分:1)
对于dbo拥有的对象,数据库所有者必须相同,以维护完整的所有权链。确保数据库具有相同的所有者,并使用ALTER AUTHORIZATION ON DATABASE::YourDatabase TO YourDbOwner;
进行修复。对于其他架构中的对象,每个数据库中的架构所有者都需要映射到相同的登录名。
用户还需要在每个访问的数据库中都有一个帐户(除非启用了来宾用户)。但是,不需要授予对间接引用的对象的权限。