如何设置某表只允许插入记录?

ekingxu 2014-01-05 12:09:21
如下一张表,只允许插入记录,不允许修改和删除,因为涉及资金安全,投注后就不让修改,哪怕是打开数据库都不能改,也不能删除,请问要如何设置?



GO
/****** 对象: Table [dbo].[GameOrderList] 脚本日期: 01/05/2014 12:06:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[GameOrderList](
[ID] [int] IDENTITY(1,1) NOT NULL,
[UserID] [int] NULL,
[GameID] [int] NULL,
[GameNumber] [int] NULL,
[GameType] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[GameMoney] [decimal](18, 2) NULL,
[SaveDate] [datetime] NULL CONSTRAINT [DF_GameOrderList_SaveDate] DEFAULT (getdate()),
[SaveIP] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_GameOrderList] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'投注彩票ID' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'GameOrderList', @level2type=N'COLUMN', @level2name=N'GameID'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'投注彩票期号' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'GameOrderList', @level2type=N'COLUMN', @level2name=N'GameNumber'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'投注方式' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'GameOrderList', @level2type=N'COLUMN', @level2name=N'GameType'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'投注金额' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'GameOrderList', @level2type=N'COLUMN', @level2name=N'GameMoney'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'投注日期' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'GameOrderList', @level2type=N'COLUMN', @level2name=N'SaveDate'

GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'投注人真实IP' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'GameOrderList', @level2type=N'COLUMN', @level2name=N'SaveIP'

...全文
140 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
其实就是,不同问题,需要不同的方法来解决,要想让用户不能攻击服务器,那么就得加强安全配置,比如防火墙、杀毒软件、特别是对于帐号的权限的控制,特别的重要。 另外,比如,由超级用户创建了这个触发器,那么就要合理设置其他所有用户的权限,是他们都没有权限,来删除这个触发器
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 2 楼 ekingxu 的回复:
如果别人攻击服务器把这个触发器删除了呢?
那就没办法了,别人把你的服务器都攻击了,相当于别人控制了整个服务器,那肯定是能删除这个触发器的。 所以首先,还是得加强服务器的安全设置。
ekingxu 2014-01-05
  • 打赏
  • 举报
回复
如果别人攻击服务器把这个触发器删除了呢?
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
试试这个,建个触发器,只要是update、delete都回滚,报错:
create trigger dbo.trigger_GameOrderList
on dbo.GameOrderList
for update,delete
as

rollback
go
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 7 楼 ekingxu 的回复:
谢谢!回滚的时间会很长吗?会不会影响效率?比如在回滚的时候其他线程连接执行插入记录的操作?
哦 ,一般回滚的影响很小的,如果是一次update大量的数据,那么可能会有影响。 如果其他线程这个时候,要插入数据,那么就完全没什么影响了。
ekingxu 2014-01-05
  • 打赏
  • 举报
回复
谢谢!回滚的时间会很长吗?会不会影响效率?比如在回滚的时候其他线程连接执行插入记录的操作?
LongRui888 2014-01-05
  • 打赏
  • 举报
回复
引用 5 楼 ekingxu 的回复:
除了用触发器回滚,还有其他什么办法让UPDATE 和DELETE无法执行吗
好像没什么办法了,这个用触发器来实现是笔记容易,也很方便的。 sql server里好像 没有什么其他的机制,能实现,插入,但不能删除和更新
ekingxu 2014-01-05
  • 打赏
  • 举报
回复
除了用触发器回滚,还有其他什么办法让UPDATE 和DELETE无法执行吗

22,299

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧