数据库设置:
我正在使用连接到SQL Server后端的MS Access前端。出于安全目的,前端(用户)使用的对象(视图和存储过程)=
MyDbsFront
-名称已更改)具有不同的架构(
方案2
)然后是数据库所有者的(
方案1
)其容纳数据表。数据访问被选择性地提供给
MyDbsFront
通过视图或存储过程(通过所有权链)。
其中一张桌子(
方案1.MyTable
)具有一个触发器集,用于更新
已更新
和
已更新dByUserId
当一行中的值发生变化时,列。我将此功能放在后端,因为我有时会手动上传数据(通过Contoso),我想确保这些列得到正确更新,而不管表是以何种方式更新的。前端无法直接编辑这两列。
自动填充程序:
最近,我创建了一个存储过程(
schema1.自动更新
)这会自动填充一些列。当使用该过程修改行时,我想在
已更新dByUserId
列。为了防止更新触发器还原此更改,我包含了一个ALTER语句来临时禁用触发器,然后在更改后重新启用它。
问题:
从后端执行时,该程序运行良好。但是,当我尝试从前端执行触发器时,我遇到了权限错误(
“找不到对象,因为它不存在或没有权限…”
). 我已将问题缩小到与ALTER语句相关的权限问题,如果我授予ALTER权限
MyDbsFront
用户打开
方案1.MyTable
一切正常。但是,我不希望无限期地向前端授予ALTER权限,因为这会带来安全隐患。
问题:
有没有一种方法可以在不授予其ALTER权限的情况下从数据库前端执行包含ALTER语句的存储过程?
我尝试使用过程中的代码临时授予更改权限和撤销权限,但失败了,因为您无法向数据库所有者或您自己授予权限。