📅  最后修改于: 2023-12-03 15:05:17.844000             🧑  作者: Mango
在SQL Server中,我们可以使用系统存储过程和视图来查询数据库中所有用户的权限信息。具体方法如下:
我们可以使用sys.database_permissions
视图来查询当前数据库中所有用户的权限信息。这个视图包含了当前数据库中所有用户的权限信息,包括对象级别和列级别的权限信息。
SELECT
dp.class_desc,
OBJECT_NAME(dp.major_id) AS object_name,
USER_NAME(dp.grantee_principal_id) AS grantee,
dp.permission_name,
dp.state_desc
FROM
sys.database_permissions dp
ORDER BY
dp.class_desc, dp.permission_name;
我们可以使用sys.fn_my_permissions
函数来查询当前登录用户在当前数据库中所有对象的权限信息,包括对象级别和列级别的权限信息。可以将此查询结果与上面的查询结果进行对比,从而查看每个用户在当前数据库中的所有权限信息。
SELECT
dp.class_desc,
OBJECT_NAME(dp.major_id) AS object_name,
USER_NAME(dp.grantee_principal_id) AS grantee,
dp.permission_name,
dp.state_desc
FROM
sys.database_permissions dp
WHERE
USER_NAME(dp.grantee_principal_id) = USER_NAME()
AND dp.major_id > 0
ORDER BY
dp.class_desc, dp.permission_name;
此查询结果显示了当前登录用户在当前数据库中所有对象的所有权限访问权限。可以根据需要使用不同的过滤条件来查询特定用户的权限信息。
如果我们需要查询所有数据库中所有用户的权限信息,可以使用sp_MSforeachdb
系统存储过程和sys.database_permissions
视图来实现。此查询结果将显示所有数据库中所有用户的所有权限信息。
EXEC sp_MSforeachdb '
USE [?];
SELECT
DB_NAME() AS database_name,
dp.class_desc,
OBJECT_NAME(dp.major_id) AS object_name,
USER_NAME(dp.grantee_principal_id) AS grantee,
dp.permission_name,
dp.state_desc
FROM
[?].sys.database_permissions dp
ORDER BY
DB_NAME(), dp.class_desc, dp.permission_name
';
此查询结果将显示所有数据库中所有用户的所有权限信息,可以根据需要使用不同的过滤条件来查询特定用户的权限信息。
以上就是SQL Server查询以查找数据库中所有用户的所有权限访问权限的介绍。通过上述方法,我们可以轻松地查询数据库中所有用户的权限信息,从而更好地管理数据库的权限。