日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

jquery设置输入框为只读_将SQL中几张表设为只读,这是什么奇怪需求?

發布時間:2023/12/19 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jquery设置输入框为只读_将SQL中几张表设为只读,这是什么奇怪需求? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近接到一個奇怪的需求,要將SQL Server中的幾張表設為只讀。我的第一反應就是直接將用戶設為只讀權限就好了,但是仔細一想又不是那么回事。

創建只讀賬號

SQL Server的只讀賬號是針對某個具體的數據庫,設置的方法很簡單:

  • 進入Sqlserver Management Studio(MSSQL客戶端)
  • 選擇安全性->登錄名->右鍵新建登錄名
  • 在常規里輸入用戶名和密碼
  • 在"用戶映射"里“映射到此登錄名的用戶”選擇該用戶可以操作的數據庫
  • 在“數據庫角色成員身份”里選擇"db_datareader",
  • 這樣一個只讀用戶就創建完成了。
  • 但是這樣會造成所有的表都變成只讀,這與需求不符。

    那該怎么辦呢?今天就告訴大家幾種常見的方法。

    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>

    結果會報如下錯誤提示:

    ![image](https://upload-images.jianshu.io/upload_images/22570485-fcbcdb45ba0a302f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    證明我們設置的觸發器生效了。

    雖然我們一般不提倡在數據庫中使用觸發器,因為觸發器會造成有很多性能上的影響,但是如果用來控制權限還是可以的。

    此外該方法只針對少量需要設置為只讀的表,如果需要設置表比較多就不太合適了。

    如果要禁用該觸發器也很簡單,使用如下代碼即可:

    <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中几张表设为只读,这是什么奇怪需求?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。