我维护了一个跨越Microsoft SQL Server上多个数据库的应用程序,我们将其称为PROD和ARCHIVE。出于审核目的,当用户通过应用程序访问数据库时,将在数据库上使用其凭据。
在此应用程序的某些安装中,ARCHIVE不存在,并且有适当的代码来处理sys.database中不存在的ARCHIVE。但是,当ARCHIVE存在时,每个人都可以访问PROD和ARCHIVE。
我们希望能够对应用程序进行分段,以使所有用户都保留对PROD的访问权限,但是某些用户无法访问ARCHIVE。在这些情况下,我想利用分支,我们必须检查ARCHIVE是否存在以及当前登录名是否有权访问它。
不错,除了我必须能够运行只能访问PROD才能找到它的查询,而且我在网上可以找到的大多数内容都使我可以针对ARCHIVE.sys.database_permissions运行查询。 / p>
是否可以运行查询以验证仅可以访问PROD时无法访问ARCHIVE?
答案 0 :(得分:2)
更多的搜索使我明白了这一点
如果用户有权访问数据库,则HAS_DBACCESS返回1;如果用户无法访问数据库,则返回0;如果数据库名称无效,则返回NULL。
所以在这种情况下,我需要的很简单:
select cast (ISNULL(HAS_DBACCESS('ARCHIVE'), 0) as bit);
可以在PROD上正常运行。我对此不是100%的确定,因为如果数据库已脱机,它也会返回false,这实际上是我可能希望在用户端看到的东西,但这是以后的开发需要解决的问题。 >