首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询dbo.sysobjects的权限

查询dbo.sysobjects的权限
EN

Stack Overflow用户
提问于 2011-12-02 20:24:06
回答 1查看 5.9K关注 0票数 6

我使用以下查询来检查我的SQL DB中是否有用户定义的对象。

代码语言:javascript
复制
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。这意味着如果exists调用返回空行。

但是,如果我将用户添加为sysadmin,那么我得到的testFormEmpty值为0,并且至少有一行被选中。

我不想将用户添加为sysadmin。为了使select from dbo.sysobjects返回内容,我应该授予的最低角色/权限是多少。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-03 02:07:17

首先,你应该使用sys.objects而不是dbo.sysobjects。dbo.sysobjects是一个SQL2000构造,由于向后兼容性的原因,它只存在于SQL2008中。对于在数据库中创建的每个用户定义的、模式作用域的对象,sys.objects都包含一行,因此您根本不必过滤查询。sys.all_objects是一个超集,它同时包含系统对象和用户对象。

其次-在权限方面-在SQL Server 2005和更高版本中,目录视图中元数据的可见性仅限于用户拥有或已被授予某些权限的安全对象。因此,您的用户必须被授予对其正在查找的项目的某些权限。向用户授予对数据库中架构的视图定义将允许查询工作,而不会授予对任何数据的访问权限。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8356287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档