我目前正在制作一个vb.net程序,它需要检查表的权限(如果表不存在,那么数据库上的权限,如果数据库不存在,那么对sql server的权限)
是否有一种检查房舍权限的方法,以及如何检查?
我一直在google上搜索,但是我得到的结果是一个2页长的sql脚本。
发布于 2013-10-15 18:45:13
我将把创建数据库的责任推给最终用户,并允许用户指定数据库;安装程序创建数据库可能是有效的,但它也应该接受已由最终用户提供名称的数据库。如果最终用户已经创建了一个使用该名称创建的数据库,您不希望假定数据库名,您将与其直接冲突。
也就是说,权限存储在sys.database_permissions中,其中概述了用户在查询的数据库中的权限和sys.server_permissions,以确定他们是否有能力创建数据库。
尽管Server有一个封装查询权限的函数,但有益的是,HAS_PERMS_BY_NAME函数在这里很有用,例如:
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE TABLE')...will查看当前用户是否有能力在命名数据库中“创建表”,同时
SELECT HAS_PERMS_BY_NAME(null, null, 'CREATE ANY DATABASE')...will告诉您当前用户是否可以创建数据库。权限的名称是您将传递给GRANT的名称。有关更多信息和示例,请参阅文档。
发布于 2013-10-17 10:40:25
我还组装了另一个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对我有用,只是稍微修改一下。
https://stackoverflow.com/questions/19359064
复制相似问题