问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请用SQL的GRANT 和REVOKE语句(加上视图机制)完成以下授权定义或存取控制功能:

发布网友 发布时间:2022-04-13 02:18

我来回答

2个回答

热心网友 时间:2022-04-13 03:48

如何让数据库的用户,只能 SELECT 到自己 INSERT 的数据。如何让数据库的用户,只能看到自己创建的数据。

--创建测试表
-- 3个字段,1自增主键,1数据,1所有者。
CREATE TABLE B (
ID INT identity(1, 1) PRIMARY KEY,
DATA VARCHAR(10),
OWNER VARCHAR(20)
);
go

-- 视图,隐藏所有者这一列
-- 并强制只能检索 所有者 = 当前登录用户
CREATE VIEW VB AS
SELECT
ID, DATA
FROM
B
WHERE
OWNER = user;
go

-- 首先插入3条数据,模拟用户 A,B,C
INSERT INTO B
SELECT 'A', 'A' UNION ALL
SELECT 'B', 'B' UNION ALL
SELECT 'C', 'C'
go

--然后 创建触发器,确保插入数据的时候,OWNER = 当前登录用户.
CREATE TRIGGER BeforeInsertB
ON B
FOR INSERT
AS
BEGIN
UPDATE
B
SET
Owner = user
FROM
B JOIN INSERTED ON (B.id = INSERTED.ID);
END
go

-- 开始模拟自己的插入
INSERT INTO VB VALUES( 'Me' );
GO
-- 尝试检索
SELECT * FROM VB
GO
ID DATA
----------- ----------
4 Me
(1 行受影响)
只看到自己插入的数据。

-- 下面去 创建 A , B 用户。
CREATE LOGIN A
WITH PASSWORD='A',
DEFAULT_DATABASE=[Test],
DEFAULT_LANGUAGE=[简体中文],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF;
CREATE LOGIN B
WITH PASSWORD='B',
DEFAULT_DATABASE=[Test],
DEFAULT_LANGUAGE=[简体中文],
CHECK_EXPIRATION=OFF,
CHECK_POLICY=OFF;
CREATE USER [A]
FOR LOGIN [A];
CREATE USER [B]
FOR LOGIN [B];

-- 对 A,B 用户进行 VIEW 的授权,
GRANT
INSERT, SELECT, UPDATE
ON [Test].[dbo].[VB]
TO A;
GRANT
INSERT, SELECT, UPDATE
ON [Test].[dbo].[VB]
TO B;
GO

-- 分别以 A 用户 和 B 用户进行登录,并查询。
E:\>sqlcmd -S "localhost\SQLEXPRESS" -U A -P A
1> use test
2> select * from vb
3> go
已将数据库上下文更改为 'test'。
ID DATA
----------- ----------
1 A
(1 行受影响)
1> select * from B
2> go
消息 229,级别 14,状态 5,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
拒绝了对对象 'B' (数据库 'test',架构 'dbo')的 SELECT 权限。

E:\>sqlcmd -S "localhost\SQLEXPRESS" -U B -P B
1> use test
2> go
已将数据库上下文更改为 'test'。
1> select * from vb
2> go
ID DATA
----------- ----------
2 B
(1 行受影响)
1> select * from B
2> go
消息 229,级别 14,状态 5,服务器 HOME-BED592453C\SQLEXPRESS,第 1 行
拒绝了对对象 'B' (数据库 'test',架构 'dbo')的 SELECT 权限。
1> INSERT INTO vb VALUES ('B Only');
2> go
(1 行受影响)
1> select * FROM VB;
2> go
ID DATA
----------- ----------
2 B
5 B Only
(2 行受影响)

结果显示,A,B用户登录以后,只能看到 Owner = 自己的数据。
因为只有对 View 有权限,对原始的表没有权限,因此看不到别人的数据。

热心网友 时间:2022-04-13 05:06

user()是获取数据库当前用户,
SQL 将table 赋权给用户就是这么写了,
可以通过在企业管理器的图形界面就简单明了了追问user()=name是指当前用户的名字是和自己的相同???

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
孤胆枪手怎么设置局域网啊、 我家小狗刚领来,没有名字,拜托大家起个名字。 护肤品代加工 水浒Q传跨服PK是怎么回事啊 新水浒Q传什么叫PK保护状态,上号不到一分钟就被打,求解 水浒Q传 为什么要pk有什么好处? 为什么贷款每次都审核失败 有谁能说一下手机贷审核不通过的原因吗?我都审核好多次了都不能通过... 贷款审核失败是什么原因 为什么贷款未通过审核 开放式空气潜水呼吸器的组成与特征是哪些? 玩具飞机B_SERIES不起飞怎么办 海固正压式空气呼吸器与潜水呼吸器有什么区别? qq邮箱问题,不能收到验证,,很久了,什么京东这些验证都没有收到,郁闷的很。。求大神帮助 问几个和Excel有关的问题 series在VB中的用法 京东商城邮箱验证出问题 dell笔记本allen-bradley_co 1784-pcmk_series_b没有驱上,是什么设备 series什么意思 在京东商城手机和邮箱验证时,要点击“获取短信校验‘’时,无反应,试了好多次都是这样的,手机和邮箱... applied mathematics-a journal of chinese universities series b属于sci吗 京东验证邮箱,填写不了校验码,一直是灰色的,怎么弄啊 series b preferred make whole 是什么意思 AB PLC 1756 L61 下载固件的时候会有series A和series B之分,这两个系列有什么区别? chinese annals of mathematics,series b 是什么级别的期刊 鲤鱼怎么做好吃,酱炖鲤鱼的家常做法 京东商城进行邮箱验证时,输入密码和验证码后,又跳到这个页面,怎么回事啊 Journal of Combinatorial Theory, Series B是什么 我想问一下win7系统怎么*用户修改ip?*包括管理员也不能修改ip地址!怎么做?没有交换机和 梦到两个小孩在冰上玩,然后冰裂掉水里了,一把拉上来一个,另个离得 梦见在水里就了两个小男孩他们被水淹了被我拉上来了 澜鑫坊冻干海参多少钱一盒 斤开头成语接龙 斤斤计较班班错下句 如何完成这组成语接龙答案 三,不,雀,跃,四,食,道,之,说,欢,变,言,火,烟组成的成语接龙 只斤斤计较于蝇头小利,后面一句怎么说 恢字开头的成语接龙 我们来玩成语接龙吧哈哈 一楼一个成语!我先!!朗朗乾坤→ 我想看成语接龙? 小鸡应该怎么养 怎样养小鸡? 芹菜牛肉炒米粉的做法,芹菜牛肉炒米粉怎么做 请问芹菜炒牛肉要芡粉吗 手抓羊肉的名称是怎么来的? IE主页怎么恢复? IE主页被恶意更改后,如何恢复? 如何恢复IE的主页 IE主页被篡改了 怎么改回来 您好,我的IE回复不了主页,搜页面还是搜狗的,请问怎么恢复? IE主页怎么能恢复?