📌  相关文章
📜  SQL Server 查询以查找数据库中所有用户的所有权限访问权限(1)

📅  最后修改于: 2023-12-03 15:05:17.844000             🧑  作者: Mango

SQL Server 查询以查找数据库中所有用户的所有权限访问权限

在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查询以查找数据库中所有用户的所有权限访问权限的介绍。通过上述方法,我们可以轻松地查询数据库中所有用户的权限信息,从而更好地管理数据库的权限。