2015-01-16 21 views
0

我定义成以下视图myCustomDatabase如何赋予用户对视图的访问权限,但不允许视图正在使用的表格?

CREATE VIEW myCustomDatabase.dbo.myView AS 
    SELECT job_id FROM msdb.dbo.sysjobhistory 

myCustomDatabase的主人是SA

我的当前用户(称为currentUser)只会对myCustomDatabasedb_reader作用。

guest is enabled on msdb database。

当我执行我得到以下错误的观点:

The SELECT permission was denied on the object 'sysjobhistory', database 'msdb', schema 'dbo'. 

我了解自己现有的用户没有在系统数据库中定义的角色。

我应该给我当前用户允许他执行视图(其中只包含系统的一列)的角色/授权,但不能授予他对表格的完全访问权限。

要继续下面的观点应该工作时currentUser称为:

CREATE VIEW myCustomDatabase.dbo.myView AS 
    SELECT job_id FROM msdb.dbo.sysjobhistory 

,而不是下面的查询:

SELECT * FROM msdb.dbo.sysjobhistory 

编辑:可视表中MSDB


EDIT2:我的SQLServer的版本是2008年

回答

2

您不需要授予只要所有权链是完整的视图引用的表的权限。在不同的数据库dbo拥有对象的情况下,这要求:

  1. 这两个数据库已在DB_CHAINING选项打开(通过在MSDB默认 )
  2. 数据库具有相同的所有者(“山”是MSDB的默认所有者)
  3. 用户在其他数据库安全上下文(宾馆在msdb中启用默认 )

因此,下面的脚本应该做的工作。

ALTER DATABASE myCustomDatabase SET DB_CHAINING ON; 
ALTER AUTHORIZATION ON DATABASE::myCustomDatabase TO sa; 

注意仅当您信任特权用户权限创建dbo拥有的对象,你应该能够在SA拥有数据库DB_CHAINING。如果只有sysadmin角色成员可以创建对象,这不是一个考虑因素。另外,如果旧所有者不是sysadmin角色成员,并且您需要该登录名以保留dbo权限,请将旧所有者作为常规数据库用户添加并添加到db_owner角色。

+0

我的自定义数据库不属于* sa *用户,如果我将* sa *设置为拥有者,您建议它可以破坏一些现有的访问规则? – Fractaliste

+0

@Fractaliste,我在帖子中添加了更多信息。这也可以通过证书来完成。如果您指定了正在使用的SQL Server版本,我将添加有关该技术的更多信息。 –

+0

如果两个数据库都是sa拥有的,我不需要在DATABASE :: myCustomDatabase上执行'ALTER AUTHORIZATION TO sa;'是不是? – Fractaliste

相关问题