怎样在授权语句中写入查询子句?

ekaleb 2018-05-05 04:54:31
例如想要授权某一用户查询表中年龄大于50的某几列
...全文
1161 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenny6666 2018-05-06
  • 打赏
  • 举报
回复
子查询是一个SELECT查询,返回单个值且嵌套在SELECT、INSERT、UPDATE和DELETE语句或其它查询语句中,任何可以使用表达式的地方都可以使用子查询.
吉普赛的歌 2018-05-05
  • 打赏
  • 举报
回复
增加一个视图, 把用户限定只能查询这个视图即可。
------------ 1. 创建测试表、测试数据、测试视图 begin
USE tempdb
GO
IF OBJECT_ID('view_t') IS NOT NULL DROP TABLE view_t
GO
IF OBJECT_ID('t') IS NOT NULL DROP TABLE t
GO
CREATE TABLE t(
	userId INT IDENTITY(1,1) PRIMARY KEY,
	age INT,
	remark NVARCHAR(20)	
)
GO
INSERT INTO t (age,remark) VALUES(20,'小个子')
INSERT INTO t (age,remark) VALUES(30,'小个子')
INSERT INTO t (age,remark) VALUES(50,'大个子')
INSERT INTO t (age,remark) VALUES(52,'中个子')
go
CREATE VIEW view_t
AS
SELECT userId,age FROM t WHERE age>50
GO
------------ 创建测试表、测试数据、测试视图 end

------------ 2. 创建账号
USE [master]
GO
CREATE LOGIN [testLogin] WITH PASSWORD=N'test', DEFAULT_DATABASE=[tempdb], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
USE tempdb  --这里只是作为测试库, 实际用的时库名你要改过来
GO
CREATE USER [testLogin] FOR LOGIN [testLogin]
GO
GRANT SELECT ON view_t TO testLogin
GO

---------- 3. 重开窗口, 以测试账号 testLogin 登录进入
SELECT * FROM view_t
/*
userId age
4	   52
*/
SELECT * FROM t
/*
消息 229,级别 14,状态 5,第 3 行
拒绝了对对象 't' (数据库 'tempdb',架构 'dbo')的 SELECT 权限。
*/
中国风 2018-05-05
  • 打赏
  • 举报
回复
e.g.
CREATE VIEW dbo.v1
AS
SELECT * FROM usertable WHERE age>50
GO
GRANT SELECT ON dbo.v1 TO 用户;
中国风 2018-05-05
  • 打赏
  • 举报
回复
建个视图条件为:年龄大于50,把此视图授权给用户

22,207

社区成员

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

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