如何只开放数据库中的某个表的特定数据的查询权限

snwgija 2017-11-07 11:54:38
请教:如何只开放数据库中的某个表的特定数据的查询权限?
例如:
表ICStockBill中有销售出库单数据、生产领料数据,我只想开放销售出库单的数据,其中Type列确定了是销售出库单的数据

求教
...全文
629 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwfxgm 2017-11-28
  • 打赏
  • 举报
回复
引用 8 楼 yenange 的回复:
没问题就结贴吧
很好。写了如此完善的示例数据。真心不容易。
cyg17173 2017-11-28
  • 打赏
  • 举报
回复
mark,后续有用。
吉普赛的歌 2017-11-18
  • 打赏
  • 举报
回复
没问题就结贴吧
yjh53615728 2017-11-07
  • 打赏
  • 举报
回复
引用 6 楼 yenange 的回复:
-------------- 测试表及增加的视图 Begin ----------------
--这里的测试库为 tempdb
--弄清楚之后,修改相关代码,再上正式生产环境操作
USE tempdb
GO
IF OBJECT_ID('dbo.ICStockBill') IS NOT NULL
	DROP TABLE dbo.ICStockBill
GO
CREATE TABLE dbo.ICStockBill(
	id INT IDENTITY(1,1) PRIMARY KEY,
	[Type] INT	--假设1为出库单,2为其它	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.ICStockBill([Type]) VALUES(1)
INSERT INTO dbo.ICStockBill([Type]) VALUES(2)
GO
IF OBJECT_ID('dbo.view_ICStockBill_Type2') IS NOT NULL
DROP VIEW dbo.view_ICStockBill_Type2
GO
CREATE VIEW dbo.view_ICStockBill_Type2
AS
SELECT * FROM dbo.ICStockBill WHERE [type]=2
GO
-------------- 测试表及增加的视图 End ----------------

--1. 创建登录名
USE [master]
GO
IF EXISTS(SELECT * FROM sys.syslogins AS s WHERE NAME='testUser')
BEGIN
	DROP LOGIN [testUser]	
END
GO
CREATE LOGIN testUser WITH PASSWORD=N'testUser', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

--2. 进入需要授权的库,创建用户名并授权
USE tempdb
GO
IF EXISTS(SELECT 1 FROM sys.database_principals WHERE NAME='testUser' AND type_desc='SQL_USER')
	DROP USER testUser
GO
CREATE USER testUser FOR LOGIN testUser
GO
GRANT SELECT ON dbo.view_ICStockBill_Type2 TO testUser 


--------------------- 用 testUser 用户登录之后 -----------------------
USE [tempdb]
GO
SELECT [id]
      ,[Type]
FROM ICStockBill
/*
消息 229,级别 14,状态 5,第 4 行
拒绝了对对象 'ICStockBill' (数据库 'tempdb',架构 'dbo')的 SELECT 权限。
*/

SELECT [id] ,[Type]  FROM [dbo].[view_ICStockBill_Type2]
/*
id	Type
2	2
*/

我试一下,谢谢大神
吉普赛的歌 2017-11-07
  • 打赏
  • 举报
回复
-------------- 测试表及增加的视图 Begin ----------------
--这里的测试库为 tempdb
--弄清楚之后,修改相关代码,再上正式生产环境操作
USE tempdb
GO
IF OBJECT_ID('dbo.ICStockBill') IS NOT NULL
	DROP TABLE dbo.ICStockBill
GO
CREATE TABLE dbo.ICStockBill(
	id INT IDENTITY(1,1) PRIMARY KEY,
	[Type] INT	--假设1为出库单,2为其它	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.ICStockBill([Type]) VALUES(1)
INSERT INTO dbo.ICStockBill([Type]) VALUES(2)
GO
IF OBJECT_ID('dbo.view_ICStockBill_Type2') IS NOT NULL
DROP VIEW dbo.view_ICStockBill_Type2
GO
CREATE VIEW dbo.view_ICStockBill_Type2
AS
SELECT * FROM dbo.ICStockBill WHERE [type]=2
GO
-------------- 测试表及增加的视图 End ----------------

--1. 创建登录名
USE [master]
GO
IF EXISTS(SELECT * FROM sys.syslogins AS s WHERE NAME='testUser')
BEGIN
	DROP LOGIN [testUser]	
END
GO
CREATE LOGIN testUser WITH PASSWORD=N'testUser', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

--2. 进入需要授权的库,创建用户名并授权
USE tempdb
GO
IF EXISTS(SELECT 1 FROM sys.database_principals WHERE NAME='testUser' AND type_desc='SQL_USER')
	DROP USER testUser
GO
CREATE USER testUser FOR LOGIN testUser
GO
GRANT SELECT ON dbo.view_ICStockBill_Type2 TO testUser 


--------------------- 用 testUser 用户登录之后 -----------------------
USE [tempdb]
GO
SELECT [id]
      ,[Type]
FROM ICStockBill
/*
消息 229,级别 14,状态 5,第 4 行
拒绝了对对象 'ICStockBill' (数据库 'tempdb',架构 'dbo')的 SELECT 权限。
*/

SELECT [id] ,[Type]  FROM [dbo].[view_ICStockBill_Type2]
/*
id	Type
2	2
*/

二月十六 2017-11-07
  • 打赏
  • 举报
回复
引用 4 楼 yjh53615728 的回复:
[quote=引用 3 楼 sinat_28984567 的回复:] [quote=引用 2 楼 yjh53615728 的回复:] [quote=引用 1 楼 sinat_28984567 的回复:] 试试建立视图,读取特定数据,然后只给这个视图查询权限
GRANT SELECT on 视图 to 用户名
那我也要先创建一个用户吧,赋予这个用户的权限吧[/quote] 新建可以,用现有的也行[/quote] 有public什么权限的,好多啥权限的[/quote] 恩要给一个public权限
yjh53615728 2017-11-07
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
[quote=引用 2 楼 yjh53615728 的回复:] [quote=引用 1 楼 sinat_28984567 的回复:] 试试建立视图,读取特定数据,然后只给这个视图查询权限
GRANT SELECT on 视图 to 用户名
那我也要先创建一个用户吧,赋予这个用户的权限吧[/quote] 新建可以,用现有的也行[/quote] 有public什么权限的,好多啥权限的
二月十六 2017-11-07
  • 打赏
  • 举报
回复
引用 2 楼 yjh53615728 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:] 试试建立视图,读取特定数据,然后只给这个视图查询权限
GRANT SELECT on 视图 to 用户名
那我也要先创建一个用户吧,赋予这个用户的权限吧[/quote] 新建可以,用现有的也行
yjh53615728 2017-11-07
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
试试建立视图,读取特定数据,然后只给这个视图查询权限
GRANT SELECT on 视图 to 用户名
那我也要先创建一个用户吧,赋予这个用户的权限吧
二月十六 2017-11-07
  • 打赏
  • 举报
回复
试试建立视图,读取特定数据,然后只给这个视图查询权限
GRANT SELECT on 视图 to 用户名

22,208

社区成员

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

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