首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查表的权限

检查表的权限
EN

Stack Overflow用户
提问于 2013-10-14 11:22:25
回答 2查看 6.5K关注 0票数 1

我目前正在制作一个vb.net程序,它需要检查表的权限(如果表不存在,那么数据库上的权限,如果数据库不存在,那么对sql server的权限)

是否有一种检查房舍权限的方法,以及如何检查?

  • 如何为用户"testuser“检查表"testdb.testtable”上的权限
  • 如何为用户"testuser“检查数据库"testdb”上的权限
  • 如何为用户"testuser“检查服务器上的权限

我一直在google上搜索,但是我得到的结果是一个2页长的sql脚本。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-15 18:45:13

我将把创建数据库的责任推给最终用户,并允许用户指定数据库;安装程序创建数据库可能是有效的,但它也应该接受已由最终用户提供名称的数据库。如果最终用户已经创建了一个使用该名称创建的数据库,您不希望假定数据库名,您将与其直接冲突。

也就是说,权限存储在sys.database_permissions中,其中概述了用户在查询的数据库中的权限和sys.server_permissions,以确定他们是否有能力创建数据库。

尽管Server有一个封装查询权限的函数,但有益的是,HAS_PERMS_BY_NAME函数在这里很有用,例如:

代码语言:javascript
运行
复制
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE TABLE')

...will查看当前用户是否有能力在命名数据库中“创建表”,同时

代码语言:javascript
运行
复制
SELECT HAS_PERMS_BY_NAME(null, null, 'CREATE ANY DATABASE')

...will告诉您当前用户是否可以创建数据库。权限的名称是您将传递给GRANT的名称。有关更多信息和示例,请参阅文档。

票数 1
EN

Stack Overflow用户

发布于 2013-10-17 10:40:25

我还组装了另一个SQL查询。但是,如果用户没有访问数据库的权限,这将返回一个错误。

代码语言:javascript
运行
复制
SELECT pe.*,object_name(pe.major_id), pr1.name as Grantee, pr2.name as Grantor, pr1.create_date,pr1.default_schema_name  from sys.database_permissions as pe
join sys.database_principals as pr1 on pe.grantee_principal_id = pr1.principal_id 
join sys.database_principals as pr2 on pe.grantor_principal_id = pr2.principal_id
where pr1.name = CURRENT_USER 
go

加入“使用ReplaceWithNameOfDatabase”

查询将对该数据库进行查询。

我以前从未真正使用过MSSQL,只有MYSQL,而且用户登录数据的存储方式似乎有很大的不同。

我发现这个SQL Server: Permissions on table对我有用,只是稍微修改一下。

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

https://stackoverflow.com/questions/19359064

复制
相关文章

相似问题

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