sql-server - 实现集中存储过程的最佳方式
问题描述
我们创建了一个新数据库,我们可以在其中存储公司的常用数据和存储过程。*假设新数据库的名称是 dbcenter。*我们需要在 dbcenter 中创建一个存储过程 (spGetEmpDetails),从旧数据库 (dbemployees) 获取数据,并且新数据库 (dbpayrol) 将访问该存储过程。*当访问 spGetEmpDetails 时,发生了用户无权访问 tblEmployees 的错误,因此我不得不将该用户的读取访问权限授予 tblEmployees。
我的问题是,我可以只授予对 spGetEmpDetails 的读取权限而不是访问它的用户吗?因此,如果新用户需要访问 spGetEmpDetails,我只需要授予对 spGetEmpDetails 的访问权,而不是对 tblEmployees 的访问权。
解决方案
您可以查看 Erland Sommarskog 的这篇文章:
http://www.sommarskog.se/grantperm.html#crossdb
根据文章,它列出了跨数据库访问的可用选项,如下所示:
- 授予对其他数据库中对象的直接权限。
- 启用来宾用户。
- 证书签名。
- 启用跨数据库所有权链接。
- 以 + 值得信赖的方式执行。
显然,每一种都有优点和缺点。启用来宾用户、启用跨数据库所有者链接或将 TRUSTWORTHY 设置为 true 会引入安全风险,因此您应该在选择最适合您要求的实现之前考虑这些风险。
推荐阅读
- html - HTML CSS Grid-Container 自动滚动到所需元素
- java - 谷歌 JWT 无效签名
- python - python docstring样式留下空格
- pine-script - 在 pine 脚本中显示 hline 的价格信息
- sql - 为子表中的列添加检查约束
- swift - 如何从 Swift 中的 Date() 中获取当前时间(hh:mm:ss 格式)?
- android - 如何使用下拉列表制作材料芯片
- google-apps-script - 用户可通过按钮将每分钟触发器安装到独立脚本
- html - 我的网站没有正确加载。连接到某个网络时显示 404 错误,
- rust - 专用人造丝池提交工作并异步等待完成