使用SQL Server 2008,有没有办法只允许通过存储过程插入表,如果是这样,怎么办?
修改
最好的方法可能是Martin Smith建议使用INSTEAD OF INSERT触发器。这个问题的直接答案是marc_s'与GRANT和DENY合作,但它不会限制某些用户帐户。
答案 0 :(得分:9)
只是不要授予任何数据库用户(以及您的“公共”角色)对表的INSERT权限。
授予这些用户执行INSERT存储过程的权限 - 这样,他们可以调用存储过程,但是他们不能直接将任何数据插入到基础表中。
DENY INSERT ON dbo.YourTable TO PUBLIC
GRANT EXECUTE ON dbo.InsertDataProc TO PUBLIC
答案 1 :(得分:6)
拒绝对表的INSERT
权限,并为存储过程授予EXECUTE权限。
答案 2 :(得分:4)
问题的动机是什么?是因为存储过程包含您在插入数据时依赖的某些逻辑吗?如果是这样,您可能希望使用触发器来封装此逻辑。
如果这不合适并且您想要阻止具有sysadmin权限的人直接插入到表中,那么您不能,但是您可以确保使用{{1}不会意外地发生触发器引发错误并回滚,除非设置了某个INSTEAD OF INSERT
值,然后清除CONTEXT_INFO
(您的存储过程可以将其设置为预期值)
http://msdn.microsoft.com/en-us/library/aa214382%28SQL.80%29.aspx
答案 3 :(得分:2)
使用权限(授权)。创建SP并将execute
权限授予相关用户或角色。然后拒绝表格中的insert
权利,你应该全部设置。