设置SQLServer数据库中某些表为只读的多种方法分享

在某些情况下需要把SQLServer的表设为只读,下面举出几种方法,需要的朋友可以参考下

一般情况下会有几种情况需要你把数据库设为只读:
1. Insert,Update,Delete 触发器
2. Check 约束 和 Delete 触发器
3. 设置数据库为只读
4. 把表放到只读文件组中
5. 拒绝对象级别权限
6. 创建视图
在开始之前,先创建一个数据库及表作为示例:
代码如下:
create database MyDB
create table tblEvents
(
id int,
logEvent varchar(1000)
)
insert into tblEvents
values (1, ‘Password Changed’), (2, ‘User Dropped’), (3, ‘Finance Data Changed’)

nsert/Update/Delete触发器:
请注意这里使用的是INSTEADOF trigger,因为如果你使用了AFTER trigger,会在执行DELETE, UPDATE和INSERT语句时请求锁,会对写事务日志和回滚操作造成性能上的影响
代码如下:
CREATE TRIGGER trReadOnly_tblEvents ON tblEvents
INSTEAD OF INSERT,
UPDATE,
DELETE
AS
BEGIN
RAISERROR( ‘tblEvents table is read only.’, 16, 1 )
ROLLBACK TRANSACTION
END

当用户执行insert/update/delete时,将提示以下错误:
Msg 50000, Level 16, State 1, Procedure trReadOnly_tblEvents, Line 7tblEvents table is read only.Msg 3609, Level 16, State 1, Line 1The transaction ended in the trigger. The batch has been aborted.

使用 Check 约束和Delete 触发器:
现在先在表中添加一个check 约束“1=0”,意味着总是失败。它禁止你在任何行执行INSERT或者Delete操作。
首先,先禁用在上一步创建的触发器:disable trigger trReadOnly_tblEvents on tblevents然后,添加约束:ALTER TABLE tblEvents WITH NOCHECK ADD CONSTRAINT chk_read_only_tblEvent CHECK( 1 = 0 )执行以后,无论你执行任何一个INSERT/UPDATE语句,都将提示以下错误信息:
Msg 547, Level 16, State 0, Line 1
The UPDATE statement conflicted with the CHECKconstraint “chk_read_only_tblEvent”. The conflict occurred indatabase “MyDB”, table “dbo.tblEvents”.
The statement has been terminated.
但是,该约束不会对DELETE操作造成影响,为此,需要再创建一个DDL触发器:
代码如下:
CREATE TRIGGER trReadOnlyDel_tblEvents ON tblEvents
INSTEAD OF
DELETE
AS
BEGIN
RAISERROR( ‘tblEvents table is read only.’, 16, 1 )
ROLLBACK TRANSACTION
END

设置数据库为只读:
你可以设置数据库为只读,这样就禁止对整个数据库的DDL/DML操作。可以使用以下语句:
代码如下:
USE [master]
GO
ALTER DATABASE [MyDB] SET READ_ONLY WITH NO_WAIT
GO

把表放到只读文件组:
可以在一个只读文件组中创建一个表:
代码如下:
USE [master]
GO
ALTER DATABASE [MyDB] ADD FILEGROUP [READ_ONLY_TBLS]
GO
ALTER DATABASE [MyDB] ADD FILE ( NAME = N’mydb_readonly_tables’, FILENAME = N’C:\JSPACE\myDBReadOnly.ndf’ , SIZE = 2048KB , FILEGROWTH = 1024KB ) TO FILEGROUP [READ_ONLY_TBLS]
GO
DROP table tblEvents
create table tblEvents
(
id int,
logEvent varchar(1000)
)
ON [READ_ONLY_TBLS]
ALTER DATABASE [MyDB] MODIFY FILEGROUP [READ_ONLY_TBLS] READONLY
任何对表的DML操作都会被拒绝,并返回以下错误信息:
Msg 652, Level 16, State 1, Line 1
The index “” for table “dbo.tblEvents” (RowsetId 72057594038845440) resides on a read-only filegroup (“READ_ONLY_TBLS”), which cannot be modified.

拒绝对象级别权限
可以通过DCL命令控制用户权限,但此步无法限制高级权限用户(如system admin,DatabaseOwner):
代码如下:
DENY INSERT, UPDATE, DELETE ON tblEvents TO Jugal
DENY INSERT, UPDATE, DELETE ON tblEvents TO Public

创建视图
为了替代直接访问表,可以使用视图:
代码如下:
create view vwtblEvents
as
select ID, Logevent from tblEvents
union all
select 0, ‘0’ where 1=0

在这个视图中,使用了UNION,只有在你确保有对应数量的列时才使用。在这个例子中,表有两列,所以使用两个输出列。同时,你也应该确保数据类型也一致。
当一个用户尝试通过INSERT/UPDATE/DELETE操作数据时,将得到以下错误信息:
Msg 4406, Level 16, State 1, Line 1Update or insert of view or function ‘vwtblEvents1′ failed because it contains a derived or constant field.Msg 4426, Level 16, State 1, Line 1View’vwtblEvents1’ is not updatable because the definition contains a UNIONoperator.

最后一步:
确认是否有必要用这些步骤来设置表为只读。
如果一个表总是只读,那么你应该放到只读文件组中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/896459.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月28日 18:00:35
下一篇 2025年11月28日 18:00:56

相关推荐

  • 加密被动收入帝国?Staking与Yield Farming巅峰指南

    Staking通过锁定代币支持PoS网络并获得奖励,适合追求稳定收益者;Yield Farming则通过向DeFi流动性池提供资产赚取更高收益,但伴随无常损失等风险。1、Staking有四种方式:独立质押需技术与32 ETH门槛,委托质押便捷但付服务费,流动性质押提升资金利用率,DeFi平台质押获利…

    2025年12月11日
    000
  • 顶级加密新闻聚合器盘点?4个实时资讯追踪App

    CryptoPanic、CoinGecko News、The Block Pro和Feedly是2025年追踪加密资讯的四大聚合器App。CryptoPanic整合千余信源并以情绪标签辅助判断;CoinGecko News与行情深度结合,实现数据与新闻联动;The Block Pro提供机构级深度分…

    2025年12月11日
    000
  • 如何解读链上交易量?鲸鱼积累信号判断

    Chainlink(LINK)暴涨由链上交易量激增、鲸鱼持续积累及生态扩展三大引擎驱动,2025年价格突破29美元,未平仓合约达7.7亿美元,叠加跨链合作与机构采用,预示后市看涨。 链上交易量是衡量区块链网络活跃度的核心指标,其变化可反映市场情绪与资金动向。结合鲸鱼行为分析,能更精准地预判价格走势。…

    2025年12月11日
    000
  • 如何寻找下一个有潜力的空投项目?五大策略与实用工具

    寻找潜力空投项目需结合链上数据与社区动态,通过系统性分析筛选高价值目标。一、利用Dune Analytics等平台追踪“points”“rewards”关键词,识别有明确代币化路线图的积分项目;二、定期查看Solana、Ethereum等公链生态基金动向,优先参与获官方或知名风投背书的项目;三、加入…

    2025年12月11日
    000
  • 什么是NFT聚合器?它如何帮助买家一站式浏览和购买多个平台的NFT?

    NFT聚合器通过整合多平台数据实现一站式浏览与交易,1. 聚合OpenSea等市场挂牌信息,建立中心化数据库;2. 提供跨市场搜索、价格追踪与最优报价展示;3. 用户可将不同市场的NFT加入购物车,一键完成多资产购买并节省Gas费;4. 集成数据分析、价格警报、多代币支付与批量挂单功能,提升交易效率…

    2025年12月11日
    000
  • 详解AAVE:去中心化借贷协议是如何运作的?

    Aave通过智能合约实现去中心化借贷,用户可存款获取aToken生息、超额抵押借款并维持健康因子大于1,或使用闪电贷在单笔交易内完成无抵押套利,同时支持隔离模式与高效模式优化风险与资本效率。 AAVE是领先的去中心化借贷协议,用户可通过智能合约进行存款、借款与闪电贷操作,无需中介参与。 为了方便新手…

    2025年12月11日
    000
  • 如何利用链上数据追踪大户动向?2个开源工具

    通过Dune Analytics和Blockchair可追踪大户交易行为。首先在Dune平台注册并搜索目标地址,创建SQL查询调用交易数据表,分析大额转账时间与对手地址;若无公开看板,则自定义查询生成可视化图表。其次使用Blockchair浏览器粘贴地址,按金额排序交易记录,点击哈希展开资金流向图谱…

    2025年12月11日
    000
  • Web3社交协议中,Lens和Farcaster哪个更创新

    Lens Protocol基于Polygon,采用NFT化资料与内容,支持模块化开发与Momoka实时处理;Farcaster部署于Optimism,使用联邦式身份模型,通过Frames实现链上交互,前端由Warpcast主导。 一、比较基础:核心架构与身份系统 Lens Protocol 与 Fa…

    2025年12月11日
    000
  • Bitget是什么?Bitget手续费标准与优惠政策

    Bitget是提供现货、合约及跟单交易的数字资产平台,现货手续费挂单/吃单均为0.1%,合约交易分别为0.02%和0.06%,支持BGB支付享折扣,VIP等级与持仓BGB可获费率优惠。 bitget是一个专注于数字资产服务的平台,为用户提供包括现货交易、合约交易以及跟单交易在内的多种服务。 1、币安…

    2025年12月11日
    000
  • KAITO代币11月20日解锁835万枚,价值640万美元,占总流通量近3%

    据最新消息,KAITO代币将于 2025年11月20日 解锁约 835万枚,解锁市值约 640万美元,占当前总流通量近 3%。此次解锁将对市场流动性产生一定影响,投资者需关注交易策略和资金流向。 KAITO代币解锁影响分析 解锁事件可能导致市场短期波动: 市场供应增加:新增流通量可能短期压制价格,需…

    2025年12月11日
    000
  • 实时加密行情平台盘点?3大免费数据可视化工具

    1、TradingView提供专业图表与技术分析工具,支持自定义指标和社区观点共享;2、CoinGecko整合多交易所数据,展示市值排名与市场情绪热力图,便于追踪DeFi、NFT等生态表现;3、CoinMarketCap聚合全球行情,提供涨跌热力图、流动性评分及价格提醒功能,助力用户实时决策。 bi…

    2025年12月11日
    000
  • 怎么高效管理加密资产组合?5种实用策略分享

    科学管理加密资产需坚持定投、多元配置、质押收益、止盈止损与定期再平衡。首先通过每周或每月固定投入降低持仓成本,并借助自动化工具确保执行;其次将资金按比例分配至主流币、Layer 1项目、前沿赛道及稳定币,控制单一资产上限以分散风险;接着选择安全的PoS项目进行质押,利用流动性质押衍生品提升资金效率;…

    2025年12月11日
    100
  • OKX官网入口:安全访问全球领先的虚拟币平台

    确认官网域名、使用DNS查询、检查安全证书、警惕非官方链接是保障OKX账户安全的关键。用户应核对“okx.com”等官方域名,通过可信渠道访问并收藏网址;利用DNS工具验证解析记录;点击挂锁图标查验SSL证书颁发对象是否正确;杜绝点击邮件或社交平台中的可疑链接,始终手动输入或从书签进入网站,防止钓鱼…

    2025年12月11日
    100
  • 欧易交易所最新官网地址下载:新手必备指南

    欧易OKX官网和APP下载需通过官方渠道获取,注册后完成安全密码设置与KYC认证即可使用现货、衍生品等交易功能,移动端安装须选择对应系统版本并信任应用。 欧易okx是一个广受欢迎的数字资产服务平台,为用户提供专业的交易体验。平台支持包括btc、eth在内的多种主流数字资产,并构建了严密的安全防护体系…

    2025年12月11日 好文分享
    100
  • 什么是链上地址_投资者应该怎么理解地址与资产关联关系

    链上地址是区块链中用于接收和存储数字资产的唯一标识符,由字母和数字组成,通过加密算法生成并对应公钥。1、比特币地址通常以“1”、“3”或“bc1”开头,不同区块链有不同格式。2、同一地址可接收多种代币,取决于所在链的协议支持。3、地址不包含身份信息,但所有交易公开透明,可通过区块链浏览器查询。资产并…

    2025年12月11日
    000
  • 如何评估一个加密项目的创始团队?从四个维度进行背景调查

    评估加密项目创始团队需核查教育与职业背景、技术成果、社区影响力及法律合规记录,确保专业性与可信度。 评估加密项目创始团队需从多个维度进行背景调查,确保其专业性与可信度。 为了方便新手快速上手币圈交易并实时查看市场数据,可通过主流交易所币安(Binance)或欧易OKX注册账户并使用官方APP,可实时…

    2025年12月11日
    000
  • Avalanche的互操作奇迹?子网架构重塑加密世界

    Avalanche子网通过自定义虚拟机、专属验证者节点和跨链通信协议实现高效互操作。1、子网由独立验证者集维护,支持自定义规则并与主网协同;2、开发者可选用EVM或WASM等虚拟机扩展应用功能;3、需至少五个验证者节点注册至P-Chain以保障去中心化安全;4、启用Teleporter协议实现无需中…

    2025年12月11日
    000
  • 香港虚拟货币app排行:十大可靠交易平台

    香港十大虚拟货币交易平台包括OSL、HashKey、Binance等,均以合规性与安全性为核心优势,其中OSL和HashKey获SFC牌照,支持零售及专业投资者交易主流币种;Binance、OKX、Bybit等则以高流动性、丰富币种及衍生品服务著称。 在香港选择一个安全可靠的虚拟货币交易平台至关重要…

    2025年12月11日
    000
  • 欧意OKX数字资产平台安装流程 欧意OKX交易所官方APP安装资源

    欧易OKX官网入口与最新版APP下载安全指引 欧易okx是全球知名的数字资产服务平台,为用户提供包括btc、eth在内的多种主流数字资产交易服务。平台凭借其强大的技术实力、严格的风控体系和丰富的产品矩阵,构建了一个安全、稳定且高效的交易环境。本文将为您提供欧易okx官方网站的直接入口,并附上最新版a…

    2025年12月11日 好文分享
    000
  • 欧意app 下载: 官方版下载指南与安全安装教程

    欧易OKX是全球领先的数字资产交易平台,提供BTC、ETH等多种加密货币交易服务,支持现货、衍生品及金融业务。用户可通过官方渠道访问网站并下载最新版App(v6.50.0),注册时需使用邮箱或手机号,设置安全密码并完成验证码验证,建议尽快完成KYC认证以提升账户安全性。安装App时应根据操作系统选择…

    2025年12月11日 好文分享
    000

发表回复

登录后才能评论
关注微信