首页 » 网站推广 » php_server变量只读技巧_将SQL中几张表设为只读这是什么奇怪需求

php_server变量只读技巧_将SQL中几张表设为只读这是什么奇怪需求

访客 2024-11-09 0

扫一扫用手机浏览

文章目录 [+]

创建只读账号

SQL Server的只读账号是针对某个详细的数据库,设置的方法很大略:

php_server变量只读技巧_将SQL中几张表设为只读这是什么奇怪需求

进入Sqlserver Management Studio(MSSQL客户端)选择安全性->登录名->右键新建登录名在常规里输入用户名和密码在"用户映射"里“映射到此登录名的用户”选择该用户可以操作的数据库在“数据库角色成员身份”里选择"db_datareader",这样一个只读用户就创建完成了。

但是这样会造成所有的表都变成只读,这与需求不符。

php_server变量只读技巧_将SQL中几张表设为只读这是什么奇怪需求
(图片来自网络侵删)

那该怎么办呢?本日就见告大家几种常见的方法。

1、利用触发器限定单表只读

有如下一张创建好的表Teacher

我们先往里面插入一条数据来证明它是可写的。

INSERTINTOTeacherVALUES('04','马六');

再查下一下表里面的结果,看是否写进去了。

证明该表是可写的,下面我们开始新建一个触发器将其设为只读。

CREATETRIGGERtrReadOnly_TeacherONTeacherINSTEADOFINSERT,UPDATE,DELETEASBEGINRAISERROR('tblEvents table is read only.',16,1)ROLLBACKTRANSACTIONEND

(提示:可以旁边滑动代码)

创建完成后,我们再往Teacher里面写数据或删数据

INSERTINTOTeacherVALUES('05','赵七');DELETEFROMTeacher TID='04';

结果会报如下缺点提示:

证明我们设置的触发器生效了。

虽然我们一样平常不提倡在数据库中利用触发器,由于触发器会造成有很多性能上的影响,但是如果用来掌握权限还是可以的。

此外该方法只针对少量须要设置为只读的表,如果须要设置表比较多就不太得当了。

如果要禁用该触发器也很大略,利用如下代码即可:

disabletrigger trReadOnly_TeacheronTeacher

2、创建只读文件组

先创建一个只读文件组

--创建文件组READ_ONLY_TBLSALTERDATABASESchoolADDFILEGROUP [READ_ONLY_TBLS]GOALTERDATABASESchoolADDFILE(NAME=N'School_readonly_tables',FILENAME = N'D:\Temp\SchoolReadOnly.ndf',SIZE=2048KB ,FILEGROWTH =1024KB)TOFILEGROUP [READ_ONLY_TBLS]

然后将要设为只读的文件先插入临时表再删除

SELECTINTO#TeacherFROMTeacherDROPTABLETeacher

然后创建刚被删除的表名,再将临时表里面的数据插入进去,末了将文件组设为只读即可

CREATETABLETeacher(TIDVARCHAR(10),TNamevarchar(100))ON[READ_ONLY_TBLS]INSERTINTOTeacherSELECTFROM#Teacher--将数据库的文件组设为只读ALTERDATABASESchoolMODIFYFILEGROUP[READ_ONLY_TBLS] READONLY

下面我们试着往Teacher里面插入数据:

INSERTINTOTeacherVALUES('05','赵七');

结果如下:

证明也是不可写的。

这种方法比较触发器繁芜一点,但是可以大批量的设置,条件是要备份好数据。

3、谢绝工具级别的操作

可以通过DCL命令掌握用户权限,但此步无法限定高等权限用户(如system admin,DatabaseOwner)

DENYINSERT,UPDATE,DELETEONtblEventsTOTestDENYINSERT,UPDATE,DELETEONtblEventsTOPublic

4、创建视图

为了替代直接访问表,可以利用视图:

CREATEVIEWV_SCASSELECTSID,CID,ScoreFROMSCUNIONALLSELECT'0','0',0WHERE1=0

当我们要删除视图中的数据时

DELETEFROMV_SCWHEREscore=30.0

会得到如下提示:

如果不加UNION ALL,正常的视图是可以删除数据的。

以上便是几种常见的将表设为只读的方法,可以根据自身实际需求进行选择。

相关文章

招商蛇口中国房地产龙头企业,未来可期

招商蛇口(股票代码:001979),作为中国房地产企业的领军企业,自成立以来始终秉持“以人为本,追求卓越”的经营理念,致力于打造高...

网站推广 2025-02-18 阅读1 评论0