我如何在 SQL 服务器中找到为我的用户帐户提供的访问列表?

How can i find list of access which provided for my user account in SQL Server?

我想查看在 SQL 服务器中为我的帐户提供的访问列表?我如何在 SQL Server Management Studio 中查看?还是我需要 运行 查询才能看到这个?

可以通过sys.fn_my_permissions

获取

Returns调用者对数据库的有效权限列表

SELECT * FROM fn_my_permissions (NULL, 'DATABASE');

同样,您可以查看不同级别(SERVER、OBJECT 等)的用户权限

这些脚本可能适合您。假设您有权 运行 他们。

USE [YourDatabaseName]

--Server level security
SELECT sp.state_desc,
sp.permission_name,
principal_name = QUOTENAME(spl.name),
spl.type_desc,
sp.state_desc + N' ' + sp.permission_name + N' TO ' + cast(QUOTENAME(spl.name COLLATE DATABASE_DEFAULT) as nvarchar(256)) AS "T-SQL Script"
FROM sys.server_permissions sp
inner join sys.server_principals spl on (sp.grantee_principal_id = spl.principal_id)
where spl.name not like '##%' -- skip PBM accounts
AND spl.name = 'YourUserName'
ORDER by sp.permission_name, spl.name


--Database level security
SELECT  dp.state_desc,
dp.permission_name,
QUOTENAME(dpl.name)  AS 'principal_name',
dpl.type_desc,
dp.state_desc + N' ' + dp.permission_name + N' TO ' + CAST(QUOTENAME(dpl.name COLLATE DATABASE_DEFAULT) AS NVARCHAR(500))  AS "T-SQL Script"
FROM sys.database_permissions AS dp
INNER JOIN sys.database_principals AS dpl ON (dp.grantee_principal_id = dpl.principal_id)
WHERE dp.major_id = 0
AND dpl.name NOT LIKE '##%' -- excluds PBM accounts
AND dpl.name = 'YourUserName'
ORDER BY dp.permission_name ASC, dp.state_desc ASC



SELECT 
    USER_NAME(grantee_principal_id) AS 'User'
  , state_desc AS 'Permission'
  , permission_name AS 'Action'
  , CASE class
      WHEN 0 THEN 'Database::' + DB_NAME()
      WHEN 1 THEN OBJECT_NAME(major_id)
      WHEN 3 THEN 'Schema::' + SCHEMA_NAME(major_id) 
    END AS 'Securable'
FROM sys.database_permissions dp
WHERE class IN (0, 1, 3)
AND minor_id = 0
AND USER_NAME(grantee_principal_id) = 'YourUserName';