首页 > 解决方案 > 实现集中存储过程的最佳方式

问题描述

我们创建了一个新数据库,我们可以在其中存储公司的常用数据和存储过程。*假设新数据库的名称是 dbcenter。*我们需要在 dbcenter 中创建一个存储过程 (spGetEmpDetails),从旧数据库 (dbemployees) 获取数据,并且新数据库 (dbpayrol) 将访问该存储过程。*当访问 spGetEmpDetails 时,发生了用户无权访问 tblEmployees 的错误,因此我不得不将该用户的读取访问权限授予 tblEmployees。

我的问题是,我可以只授予对 spGetEmpDetails 的读取权限而不是访问它的用户吗?因此,如果新用户需要访问 spGetEmpDetails,我只需要授予对 spGetEmpDetails 的访问权,而不是对 tblEmployees 的访问权。

标签: sql-serverdatabase

解决方案


您可以查看 Erland Sommarskog 的这篇文章:

http://www.sommarskog.se/grantperm.html#crossdb

根据文章,它列出了跨数据库访问的可用选项,如下所示:

  • 授予对其他数据库中对象的直接权限。
  • 启用来宾用户。
  • 证书签名。
  • 启用跨数据库所有权链接。
  • 以 + 值得信赖的方式执行。

显然,每一种都有优点和缺点。启用来宾用户、启用跨数据库所有者链接或将 TRUSTWORTHY 设置为 true 会引入安全风险,因此您应该在选择最适合您要求的实现之前考虑这些风险。


推荐阅读