数码资讯
建立各种共享只读方式在SQLServer数据库的一些表
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
一般来说,有几种情况要求您将数据库设置为只读:
1。插入、更新、删除触发器
2。检查约束并删除触发器
三.将数据库设置为只读
4。将表放在只读文件组中。
5。拒绝对象级权限
6。创建一个视图
在开始之前,创建一个数据库和表作为示例:
复制代码代码如下所示:
创建一个数据库
创建表tblevents
(
ID int,
logEvent varchar(1000)
)
插入tblevents
值(1,'password改变),(2,用户下降的),(3,'finance数据改变)
nsert /更新/删除触发器:
请注意,而不是触发器用在这里,因为如果触发后利用你,你会请求锁时,执行删除、更新和插入语句,这将导致在写事务日志和回滚操作性能的影响。
复制代码代码如下所示:
创建触发器trreadonly_tblevents在tblevents
代替插入,
更新,
删除
作为
开始
RAISERROR('tblevents表是只读的。',16, 1)
回滚事务
结束
当用户执行插入/更新/删除时,将提示以下错误:
味精50000,级别16,状态1,程序trreadonly_tblevents,线7tblevents表是只读的。味精3609, 16 16, 1 1。
使用检查约束和删除触发器:
现在,在表中添加了一个检查约束1 = 0,这意味着它始终是一个失败,它禁止您在任何行上执行插入或删除操作。
首先,第一个残疾人在上一步中创建的触发器在触发:trreadonly_tblevents tblevents和修改表tblevents,添加约束:用NOCHECK添加约束chk_read_only_tblevent检查(1 = 0)后执行,你是否执行任何插入/更新语句,会提示以下错误消息:
MSG 547,第16级,状态0,第1行
UPDATE语句的矛盾与checkconstraintchk_read_only_tblevent 。冲突发生在数据库中。
语句已终止。
但是,此约束不影响删除操作。为此,您需要创建DDL触发器:
复制代码代码如下所示:
创建触发器trreadonlydel_tblevents在tblevents
而不是
删除
作为
开始
RAISERROR('tblevents表是只读的。',16, 1)
回滚事务
结束
将数据库设置为只读:
你可以将数据库设置为只读,因此DDL和DML操作的整个数据库都是禁止的。下面的语句可以使用:
复制代码代码如下所示:
使用{主}
去
更改数据库mydb } {集read_only与no_wait
去
将表放在只读文件组中:
可以在只读文件组中创建表:
复制代码代码如下所示:
使用{主}
去
更改数据库mydb } { } { read_only_tbls添加文件组
去
更改数据库mydb } {添加文件(name = n'mydb_readonly_tables,文件名= n'c: jspace mydbreadonly。NDF,2048kb大小=,= =)
去
tblevents表
创建表tblevents
(
ID int,
logEvent varchar(1000)
)
在read_only_tbls } {
更改数据库mydb } { } { read_only_tbls修改只读文件组
桌上的任何DML操作将被拒绝并返回以下错误信息:
MSG 652,第16级,状态1,第1行
指标表dbo。tblevents (RowsetId 72057594038845440)驻留在只读文件组(read_only_tbls )
拒绝对象级权限
用户权限可以由DCL命令控制,但是这一步不能限制高层的特权用户(如系统管理员、DatabaseOwner):
复制代码代码如下所示:
否认插入、更新删除,对tblevents到面颊
否认插入、更新删除,对tblevents公共
创建一个视图
为了替换直接访问表,可以使用视图:
复制代码代码如下所示:
创建视图vwtblevents
作为
选择ID,从tblevents logEvent
联盟的所有
选择0,'0'where 1 = 0
在这个视图中,只有在确保有相应的列数时才使用联合。在本例中,表有两列,因此使用了两个输出列。同时,还应该确保数据类型也一致。
当用户试图通过插入/更新/删除操作操作数据时,获得以下错误信息:
味精4406,级别16,状态1,线1update或插入视图或function'vwtblevents1'failed因为它包含派生或恒定磁场,味精4426,级别16,状态1,线1view'vwtblevents1不可更新,因为其定义中包含合并操作。
最后一步:
确认是否需要使用这些步骤将表设置为只读。
如果表始终是只读的,则应将其放在只读文件组中。
1。插入、更新、删除触发器
2。检查约束并删除触发器
三.将数据库设置为只读
4。将表放在只读文件组中。
5。拒绝对象级权限
6。创建一个视图
在开始之前,创建一个数据库和表作为示例:
复制代码代码如下所示:
创建一个数据库
创建表tblevents
(
ID int,
logEvent varchar(1000)
)
插入tblevents
值(1,'password改变),(2,用户下降的),(3,'finance数据改变)
nsert /更新/删除触发器:
请注意,而不是触发器用在这里,因为如果触发后利用你,你会请求锁时,执行删除、更新和插入语句,这将导致在写事务日志和回滚操作性能的影响。
复制代码代码如下所示:
创建触发器trreadonly_tblevents在tblevents
代替插入,
更新,
删除
作为
开始
RAISERROR('tblevents表是只读的。',16, 1)
回滚事务
结束
当用户执行插入/更新/删除时,将提示以下错误:
味精50000,级别16,状态1,程序trreadonly_tblevents,线7tblevents表是只读的。味精3609, 16 16, 1 1。
使用检查约束和删除触发器:
现在,在表中添加了一个检查约束1 = 0,这意味着它始终是一个失败,它禁止您在任何行上执行插入或删除操作。
首先,第一个残疾人在上一步中创建的触发器在触发:trreadonly_tblevents tblevents和修改表tblevents,添加约束:用NOCHECK添加约束chk_read_only_tblevent检查(1 = 0)后执行,你是否执行任何插入/更新语句,会提示以下错误消息:
MSG 547,第16级,状态0,第1行
UPDATE语句的矛盾与checkconstraintchk_read_only_tblevent 。冲突发生在数据库中。
语句已终止。
但是,此约束不影响删除操作。为此,您需要创建DDL触发器:
复制代码代码如下所示:
创建触发器trreadonlydel_tblevents在tblevents
而不是
删除
作为
开始
RAISERROR('tblevents表是只读的。',16, 1)
回滚事务
结束
将数据库设置为只读:
你可以将数据库设置为只读,因此DDL和DML操作的整个数据库都是禁止的。下面的语句可以使用:
复制代码代码如下所示:
使用{主}
去
更改数据库mydb } {集read_only与no_wait
去
将表放在只读文件组中:
可以在只读文件组中创建表:
复制代码代码如下所示:
使用{主}
去
更改数据库mydb } { } { read_only_tbls添加文件组
去
更改数据库mydb } {添加文件(name = n'mydb_readonly_tables,文件名= n'c: jspace mydbreadonly。NDF,2048kb大小=,= =)
去
tblevents表
创建表tblevents
(
ID int,
logEvent varchar(1000)
)
在read_only_tbls } {
更改数据库mydb } { } { read_only_tbls修改只读文件组
桌上的任何DML操作将被拒绝并返回以下错误信息:
MSG 652,第16级,状态1,第1行
指标表dbo。tblevents (RowsetId 72057594038845440)驻留在只读文件组(read_only_tbls )
拒绝对象级权限
用户权限可以由DCL命令控制,但是这一步不能限制高层的特权用户(如系统管理员、DatabaseOwner):
复制代码代码如下所示:
否认插入、更新删除,对tblevents到面颊
否认插入、更新删除,对tblevents公共
创建一个视图
为了替换直接访问表,可以使用视图:
复制代码代码如下所示:
创建视图vwtblevents
作为
选择ID,从tblevents logEvent
联盟的所有
选择0,'0'where 1 = 0
在这个视图中,只有在确保有相应的列数时才使用联合。在本例中,表有两列,因此使用了两个输出列。同时,还应该确保数据类型也一致。
当用户试图通过插入/更新/删除操作操作数据时,获得以下错误信息:
味精4406,级别16,状态1,线1update或插入视图或function'vwtblevents1'failed因为它包含派生或恒定磁场,味精4426,级别16,状态1,线1view'vwtblevents1不可更新,因为其定义中包含合并操作。
最后一步:
确认是否需要使用这些步骤将表设置为只读。
如果表始终是只读的,则应将其放在只读文件组中。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。