我有一组用户“读者”在“mydatabase”上只有dbreader。 我有一个存储过程“sp”:
1 - 更新“mydatabase”中的数据,
2 - 截断数据库“mydatabase”中的表 - 这是使用动态sql完成的,因为我们不知道需要截断的表的名称
3 - 更新“mydatabse2”
中表格内的记录4 - 在“mydatabse3”
中的表格中插入记录我解决这个问题的方法是:
1 - 我将所有这3个数据库的数据库所有者设置为sa
2 - 我将存储过程“sp”更改为EXECUTE AS OWNER
3 - 我将所有这3个数据库设置为TRUSTWORTHY ON
一切正常。
我关心的问题是这个问题:
使用TRUSTWORHY ON是否存在严重的安全漏洞?
我找不到任何严肃的东西,所以我要把它留下来。
除非有人在这里提醒我一些我可能错过的东西。
答案 0 :(得分:1)
为特定数据库设置时,TRUSTWORTHY
选项允许来自该数据库的代码访问其外部的外部对象(例如,其他数据库)。
由于您唯一需要外部访问权限的代码是mydatabase
,因此您可以安全地关闭其余两个代码。
选项本身并不特别危险;毕竟,在它第一次出现在SQL Server 2005之前,只要你有足够的权限,一切都可以立即访问。而且我记不起那个时代对这个话题的任何特别抱怨。只需确保db_owner
成员的数量相当小,这通常就足够了。