Sql server 2008 查询dbo.sysobjects的权限
我有以下查询来检查我的SQL数据库中是否有任何用户定义的对象Sql server 2008 查询dbo.sysobjects的权限,sql-server-2008,Sql Server 2008,我有以下查询来检查我的SQL数据库中是否有任何用户定义的对象 DECLARE @testForEmpty BIT if exists (select top 1 null from dbo.sysobjects where (objectproperty(id, 'IsMsShipped') = 0)) set @testForEmpty = 0 else set @testForEmpty = 1 当我作为一个特定的用户运行这个查询时,我总是得到testForE
DECLARE @testForEmpty BIT
if exists
(select top 1 null from dbo.sysobjects where (objectproperty(id, 'IsMsShipped') = 0))
set @testForEmpty = 0
else set @testForEmpty = 1
当我作为一个特定的用户运行这个查询时,我总是得到testForEmpty=1。这意味着if exists调用返回空行
但是,如果将用户添加为sysadmin,则testFormEmpty值为0,并且至少选择了一行
我不想将用户添加为sysadmin。为了使select from dbo.sysobjects返回内容,我应该授予的最小角色/权限是多少
首先感谢您-您应该使用sys.objects而不是dbo.sysobjects。dbo.sysobjects是一个SQL 2000构造,出于向后兼容的原因,它仅在SQL 2008中存在。sys.objects为数据库中创建的每个用户定义、模式范围的对象包含一行,因此您根本不必过滤查询。sys.all_对象是一个超集,包含系统对象和用户对象
第二,在权限方面,在SQLServer2005和更高版本中,目录视图中元数据的可见性仅限于用户拥有或已被授予某些权限的安全文件。因此,您的用户必须被授予对其正在查找的项目的某些权限。将视图定义授予数据库中架构上的用户将允许查询工作,而不授予对任何数据的访问权。您可以创建一个视图或函数,返回结果并授予视图/函数权限。如果我将用户添加为db\U所有者,会有帮助吗?我不想使用sys创建视图/函数try。当MSFT从2000年进入2005/08年时,所有_对象似乎都被更改,以创建一个更安全的环境。例如,在sys.databases中,它似乎不直观:以abc身份登录,使用ing DB X,sys.databases不显示DB Y,尽管abc拥有该DB Y。这有什么意义?