我可以安全地确认我无权访问数据库吗?

时间:2019-10-08 23:03:47

标签: sql-server

背景

我维护了一个跨越Microsoft SQL Server上多个数据库的应用程序,我们将其称为PROD和ARCHIVE。出于审核目的,当用户通过应用程序访问数据库时,将在数据库上使用其凭据。

在此应用程序的某些安装中,ARCHIVE不存在,并且有适当的代码来处理sys.database中不存在的ARCHIVE。但是,当ARCHIVE存在时,每个人都可以访问PROD和ARCHIVE。

问题

我们希望能够对应用程序进行分段,以使所有用户都保留对PROD的访问权限,但是某些用户无法访问ARCHIVE。在这些情况下,我想利用分支,我们必须检查ARCHIVE是否存在以及当前登录名是否有权访问它。

不错,除了我必须能够运行只能访问PROD才能找到它的查询,而且我在网上可以找到的大多数内容都使我可以针对ARCHIVE.sys.database_permissions运行查询。 / p>

是否可以运行查询以验证仅可以访问PROD时无法访问ARCHIVE?

1 个答案:

答案 0 :(得分:2)

HAS_DBACCESS

更多的搜索使我明白了这一点

  

如果用户有权访问数据库,则HAS_DBACCESS返回1;如果用户无法访问数据库,则返回0;如果数据库名称无效,则返回NULL。

     

(via MSDN)

所以在这种情况下,我需要的很简单:

select cast (ISNULL(HAS_DBACCESS('ARCHIVE'), 0) as bit);

可以在PROD上正常运行。我对此不是100%的确定,因为如果数据库已脱机,它也会返回false,这实际上是我可能希望在用户端看到的东西,但这是以后的开发需要解决的问题。 >