我正在修改一个在表中进行修改的过程(让我们称之为base.dbo.important)。
我正在阅读代码以消除修改此表的所有查询。
有没有办法在程序中使该表只读,以便任何修改尝试都会引发异常?
我正在使用sql-server
答案 0 :(得分:2)
在SQLServer中,您可以拒绝对您想要的任何级别的应用程序用户的写访问权限(DB,过程,表列......您的名字!)
http://msdn.microsoft.com/en-us/library/ms173724.aspx
http://www.mssqltips.com/sqlservertip/1138/giving-and-removing-permissions-in-sql-server/
http://tweakingsqlserver.blogspot.com/2009/04/deny-table-permission-at-table-level.html
您也可以仅为该过程拒绝权限。
http://bytes.com/topic/sql-server/answers/705794-deny-user-roles-stored-procedure
答案 1 :(得分:1)
一种解决方案是将事务隔离级别设置为可序列化,然后从事务中的表中进行选择。所以,类似于:
Set Transaction Isolation Level Serializable;
Begin Tran;
Select *
From MyTable
/* Do more work */
Commit Tran;