访问权限

通过数据库角色与用户限制视图访问权限

在 SQL Server 中,可以通过创建自定义数据库角色、授予视图查询权限、再绑定用户的方式,实现只允许特定账号访问指定视图的效果。

操作步骤

1. 选择要操作的数据库

在 SQL Server Management Studio 中切换到目标数据库(或使用 USE 数据库名)。

2. 创建数据库角色

-- 创建一个数据库角色,名称为 seeview
EXEC sp_addrole 'seeview'Code language: JavaScript (javascript)

3. 为角色分配视图查询权限

-- 授予角色对指定视图的 SELECT 权限
-- 该角色只能查看下面赋予的这些视图,除此之外的表或视图均不可见
GRANT SELECT ON v_viewname1 TO seeview
GRANT SELECT ON v_viewname2 TO seeview

4. 创建登录名(服务器级别)

-- exec sp_addlogin '登录名','密码','默认数据库名'
EXEC sp_addlogin 'guest', 'guest', 'ICCard_TangHe'Code language: JavaScript (javascript)

注意:如果密码强度不够,sp_addlogin 可能执行失败。此时可以在 SSMS 界面中手动创建登录名,并勾选”强制实施密码策略”以外的选项,或设置符合强度要求的密码。

5. 创建数据库用户并绑定到角色

-- exec sp_adduser '登录名','用户名','角色'
EXEC sp_adduser 'guest', 'guest', 'seeview'Code language: JavaScript (javascript)

完整示例

-- 1. 创建数据库角色
EXEC sp_addrole 'xfxfzfztviewer'

-- 2. 分配视图查询权限给角色
GRANT SELECT ON View_XFXF_JFZT TO xfxfzfztviewer

-- 3. 创建登录名(服务器级别)
EXEC sp_addlogin 'xfxfzfztguest', 'xfxfzfztguestpwd2019', 'ChargeV4.0_GuangCai_20190510'

-- 4. 创建数据库用户并绑定到角色
EXEC sp_adduser 'xfxfzfztguest', 'xfxfzfztguest', 'xfxfzfztviewer'Code language: JavaScript (javascript)

权限验证

使用新创建的登录名 xfxfzfztguest 连接数据库后:

操作结果
SELECT * FROM View_XFXF_JFZT✅ 成功
SELECT * FROM 其他表❌ 拒绝访问
SELECT * FROM 未授权的视图❌ 拒绝访问

补充说明

  • sp_addrole:在当前数据库中创建新的数据库角色。
  • sp_addlogin:在 SQL Server 实例级别创建登录账号。
  • sp_adduser:在当前数据库中创建数据库用户,并将其关联到指定角色。
  • GRANT SELECT ON 视图名 TO 角色名:只授予对指定视图的查询权限,不授予对底层表的权限(视图需自行定义好过滤逻辑)。
  • 如果需要对多个视图授权,逐条执行 GRANT SELECT ON 视图名 TO 角色名 即可。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注