jquery设置输入框为只读_将SQL中几张表设为只读,这是什么奇怪需求?
最近接到一個奇怪的需求,要將SQL Server中的幾張表設為只讀。我的第一反應就是直接將用戶設為只讀權限就好了,但是仔細一想又不是那么回事。
創建只讀賬號
SQL Server的只讀賬號是針對某個具體的數據庫,設置的方法很簡單:
但是這樣會造成所有的表都變成只讀,這與需求不符。
那該怎么辦呢?今天就告訴大家幾種常見的方法。
1、使用觸發器限制單表只讀
有如下一張創建好的表Teacher
我們先往里面插入一條數據來證明它是可寫的。
<pre language="typescript" code_block="true">INSERT INTO Teacher VALUES('04','馬六');</pre>再查下一下表里面的結果,看是否寫進去了。
證明該表是可寫的,下面我們開始新建一個觸發器將其設為只讀。
<pre language="typescript" code_block="true">CREATE TRIGGER trReadOnly_Teacher ON TeacherINSTEAD OF INSERT,UPDATE,DELETE AS BEGIN RAISERROR( 'tblEvents table is read only.',16, 1 )ROLLBACK TRANSACTION END</pre>(提示:可以左右滑動代碼)
創建完成后,我們再往Teacher里面寫數據或刪數據
<pre language="typescript" code_block="true">INSERT INTO Teacher VALUES('05','趙七'); DELETE FROM Teacher TID='04';</pre>結果會報如下錯誤提示:
證明我們設置的觸發器生效了。
雖然我們一般不提倡在數據庫中使用觸發器,因為觸發器會造成有很多性能上的影響,但是如果用來控制權限還是可以的。
此外該方法只針對少量需要設置為只讀的表,如果需要設置表比較多就不太合適了。
如果要禁用該觸發器也很簡單,使用如下代碼即可:
<pre language="typescript" code_block="true">disable trigger trReadOnly_Teacher on Teacher</pre>2、創建只讀文件組
先創建一個只讀文件組
<pre language="typescript" code_block="true">--創建文件組READ_ONLY_TBLS ALTER DATABASE School ADD FILEGROUP [READ_ONLY_TBLS] GO ALTER DATABASE School ADD FILE ( NAME =N'School_readonly_tables', FILENAME = N'D:TempSchoolReadOnly.ndf' , SIZE =2048KB , FILEGROWTH = 1024KB ) TO FILEGROUP [READ_ONLY_TBLS]</pre>然后將要設為只讀的文件先插入臨時表再刪除
<pre language="typescript" code_block="true">SELECT * INTO #Teacher FROM Teacher DROP TABLE Teacher</pre>然后創建剛被刪除的表名,再將臨時表里面的數據插入進去,最后將文件組設為只讀即可
<pre language="typescript" code_block="true">CREATE TABLE Teacher ( TID VARCHAR(10), TName varchar(100) ) ON [READ_ONLY_TBLS]INSERT INTO Teacher SELECT * FROM #Teacher--將數據庫的文件組設為只讀
ALTER DATABASE School MODIFY FILEGROUP
[READ_ONLY_TBLS] READONLY</pre>
下面我們試著往Teacher里面插入數據:
<pre language="typescript" code_block="true">INSERT INTO Teacher VALUES('05','趙七');</pre>結果如下:
證明也是不可寫的。
這種方法相比觸發器復雜一點,但是可以大批量的設置,前提是要備份好數據。
3、拒絕對象級別的操作
可以通過DCL命令控制用戶權限,但此步無法限制高級權限用戶(如system admin,DatabaseOwner)
<pre language="typescript" code_block="true">DENY INSERT, UPDATE, DELETE ON tblEvents TO Test DENY INSERT, UPDATE, DELETE ON tblEvents TO Public</pre>4、創建視圖
為了替代直接訪問表,可以使用視圖:
<pre language="typescript" code_block="true">CREATE VIEW V_SC AS SELECT SID,CID,Score FROM SC UNION ALL SELECT '0', '0',0 WHERE 1=0</pre>當我們要刪除視圖中的數據時
<pre language="typescript" code_block="true">DELETE FROM V_SC WHERE score=30.0</pre>會得到如下提示:
如果不加UNION ALL,正常的視圖是可以刪除數據的。
以上就是幾種常見的將表設為只讀的方法,可以根據自身實際需求進行選擇。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的jquery设置输入框为只读_将SQL中几张表设为只读,这是什么奇怪需求?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: axios不发起请求_axios无法发起
- 下一篇: java类中的布尔(boolean&am