列出 SQL SERVER 中当前用户的可用数据库
介绍 :
数据库性能健康检查的先决条件之一是能够访问我们要调整的数据库。作为 SQL DBA,我们还可以意外地发现,有时我们最终会遇到这样一种情况:我们有一个客户需要我们帮助他们提高数据库的整体性能,但是他们自己现在也不再能够访问服务器和数据库。
让我们看一个可以列出所有数据库的脚本,当前登录用户可以访问 -
SELECT Name, HAS_DBACCESS(Name) AS HasAcces FROM sys.databases
上面的查询将给出类似于下面的结果——Name HasAcces master 1 tempdb 1 model 1 msdb 1 geekdb 1
在查询中,我们使用了HAS_DBACCESS函数,它会生成有关用户是否有权访问 all 数据库的信息。如果用户有权访问数据库,则返回 1,如果用户无权访问数据库,则返回 0,如果数据库名称无效,则返回 NULL。
查询以检查我们是否有权访问特定数据库 –
SELECT HAS_DBACCESS('databasename') AS HasAccess
示例-1:
SELECT HAS_DBACCESS('geekdb') AS HasAccess
HasAccess |
---|
1 |
作为 SQL DBA,我们应该始终记住函数HAS_DBACCESS的结果。当此函数结果为 0 时,也可能意味着数据库处于离线\可疑模式\单用户模式,或其他阻止我们使用数据库的问题。
示例 2 :
检查当前用户是否有权访问以下数据库 -
在 SQL Server Management Studio 中运行上述查询 -
让我们检查当前用户在哪里可以访问“SQL_DBA1”——
SELECT HAS_DBACCESS('SQL_DBA1') AS HasAccess
结果为 NULL,因为当前实例中不存在数据库。