我目前正在制作一个需要检查表权限的vb.net程序(如果表不存在,则对数据库的权限,如果数据库不存在,则对sql server的权限)
有没有办法检查 thouse 权限,以及如何?
- 如何检查用户“testuser”对表“testdb.testtable”的权限
- 如何检查用户“testuser”对数据库“testdb”的权限
- 如何检查服务器上用户“testuser”的权限
我一直在谷歌上搜索,但我得到的结果是一个 2 页长的 sql 脚本。
我目前正在制作一个需要检查表权限的vb.net程序(如果表不存在,则对数据库的权限,如果数据库不存在,则对sql server的权限)
有没有办法检查 thouse 权限,以及如何?
我一直在谷歌上搜索,但我得到的结果是一个 2 页长的 sql 脚本。
我还能够组装另一个 SQL 查询。但是,如果用户无权访问数据库,这将返回错误。
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 对我有用,稍作修改
我会将创建数据库的责任推给最终用户——并允许用户指定该数据库;安装程序创建数据库可能是有效的,但它也应该接受已经创建的数据库,其中名称已由最终用户提供。您不想假设一个数据库名称,就好像最终用户已经使用该名称创建了一个数据库,您将与它直接冲突。
也就是说,权限存储在sys.database_permissions
其中概述用户在数据库中的权限,从中查询并sys.server_permissions
确定他们是否有能力创建数据库。
尽管 SQL Server 有一个包含查询权限的函数,但很有帮助 - 该HAS_PERMS_BY_NAME
函数在这里派上用场,例如:
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE TABLE')
...将查看当前用户是否有能力在命名数据库中“创建表”,同时
SELECT HAS_PERMS_BY_NAME(null, null, 'CREATE ANY DATABASE')
...会告诉你当前用户是否可以创建数据库。权限的名称是您要传递给GRANT
. 有关更多信息和示例,请参阅文档。