当我在本地执行它时尝试使用C#SqlCommand执行此更新语句(下面)时遇到问题它工作正常但是当部署到另一台机器时我收到了权限错误
对象订单上的SELECT权限被拒绝... 对象Order ...
上的UPDATE权限被拒绝更新声明
UPDATE Order SET Request = @request WHERE Id = @ID;
有没有办法在不使用存储过程的情况下将GRANT SELECT和GRANT UPDATE添加到单个语句(如上面的更新)?
或SP是继续这种方式吗?
提前致谢
答案 0 :(得分:2)
存储过程是可行的方法,然后您可以为该存储过程分配执行权限,而无需在基表上授予权限。 SQL Server无法为各个临时SQL语句分配权限。
答案 1 :(得分:0)
您无法授予对语句的权限。您可以授予SELECT,您可以授予UPDATE,但是在表上,而不是在特定语句上。
最好的解决方案是确实使用存储过程。从存储过程执行允许的SELECT和允许的UPDATE,并使用代码签名授予必要的权限,请参阅Module Signing (Database Engine)。使用代码签名比替代方案更精细,更受限制:依赖于过程和表共同所有权来执行权限。