千家信息网

如何进行数据库权限分配的探讨

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章为大家展示了如何进行数据库权限分配的探讨,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先我们先了解下数据库的权限相关的内容主体"主体" 是可以请求
千家信息网最后更新 2026年11月01日如何进行数据库权限分配的探讨

本篇文章为大家展示了如何进行数据库权限分配的探讨,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

首先我们先了解下数据库的权限相关的内容

主体

"主体" 是可以请求 SQL Server资源的实体。 与 SQLServer授权模型的其他组件一样,主体也可以按层次结构排列。 主体的影响范围取决于主体定义的范围(Windows、服务器或数据库)以及主体是否不可分或是一个集合。 例如,Windows登录名就是一个不可分主体,而Windows组则是一个集合主体。 每个主体都具有一个安全标识符(SID)。

Windows级别的主体

Windows域登录名


Windows 本地登录名

SQL Server-级的主体

SQL Server登录名

服务器角色

数据库级的主体

数据库用户

数据库角色

应用程序角色

SQLServer sa登录名

SQL Server sa登录名是服务器级的主体。 默认情况下,该登录名是在安装实例时创建的。

public数据库角色

每个数据库用户都属于 public数据库角色。 当尚未对某个用户授予或拒绝对安全对象的特定权限时,则该用户将继承授予该安全对象的public角色的权限。

INFORMATION_SCHEMA和 sys

每个数据库都包含两个实体:

INFORMATION_SCHEMA和 sys,它们都作为用户出现在目录视图中。这两个实体是 SQL Server 所必需的。 它们不是主体,不能修改或删除它们。

基于证书的 SQL Server登录名

名称由双井号 (##)括起来的服务器主体仅供内部系统使用。 下列主体是在安装 SQL Server时从证书创建的,不应删除。

##MS_SQLResourceSigningCertificate##

##MS_SQLReplicationSigningCertificate##

##MS_SQLAuthenticatorCertificate##

##MS_AgentSigningCertificate##

##MS_PolicyEventProcessingLogin##

##MS_PolicySigningCertificate##

##MS_PolicyTsqlExecutionLogin##

guest用户

每个数据库包括一个guest。 授予guest用户的权限由对数据库具有访问权限,但在数据库中没有用户帐户的用户继承。不能删除guest用户,但可通过撤消该用户的CONNECT权限将其禁用。 可以通过在master或 tempdb以外的任何数据库中执行 REVOKE CONNECTFROM GUEST来撤消 CONNECT权限。

客户端和数据库服务器

根据定义,客户端和数据库服务器是安全主体,可以得到保护。 在建立安全的网络连接前,这些实体之间可以互相进行身份验证。 SQLServer支持 Kerberos身份验证协议,该协议定义客户端与网络身份验证服务交互的方式。

创建数据库用户

SQL2016中支持11种用户类型:

用户基于登录名在 master这是最常见的用户类型。

基于登录名基于的Windows Active Directory帐户的用户

CREATE USER [Contoso\Fritz];

基于Windows组的登录名的用户。 CREATE USER [Contoso\Sales];

基于使用 SQLServer身份验证的登录名的用户。 CREATE USER Mary;

在数据库进行身份验证的用户建议以帮助使你的数据库可移植性。

始终允许在 SQL Database。 中包含的数据库中只允许存在 SQL Server。

基于无登录名的 Windows用户的用户

CREATEUSER [Contoso\Fritz];

基于无登录名的Windows组的用户。 CREATE USER [Contoso\Sales];

中的用户 SQLDatabase或 SQL数据仓库 基于 Azure Active Directory的用户。 CREATE USER [Contoso\Fritz] FROMEXTERNAL PROVIDER;

拥有密码的包含数据库用户。 (在中不可用 SQL数据仓库。)CREATE USER Mary WITHPASSWORD = '********';

基于 Windows主体通过 Windows组登录名进行连接的用户

基于无登录名但可通过Windows组中的成员身份连接到数据库引擎的Windows用户的用户

CREATE USER [Contoso\Fritz];

基于无登录名但可通过其他Windows组中的成员身份连接到数据库引擎的Windows组的用户。 CREATE USER [Contoso\Fritz];

无法进行身份验证的用户 这些用户无法登录到 SQL Server或 SQL Database。

没有登录名的用户。 不能登录,但可以被授予权限

CREATE USER CustomAppWITHOUT LOGIN;

基于证书的用户。 不能登录,但可以被授予权限,也可以对模块进行签名。 CREATE USERTestProcess FOR CERTIFICATE CarnationProduction50;

基于非对称密钥的用户。 不能登录,但可以被授予权限,也可以对模块进行签名。 CREATE User TestProcessFROM ASYMMETRIC KEY PacificSales09;

下面的图片显示了创建数据库用户需要的选项的含义:

创建用户可以使用界面完成:

也可以使用T-SQL来进行创建

-- 创建登录名:Test 密码是: '123456'.

CREATELOGIN Test

WITH PASSWORD = '123456';

GO

上面说完了用户,下面说下数据库的角色和权限

服务器级别的权限

SQL Server 提供服务器级角色以帮助你管理服务器上的权限。 这些角色是可组合其他主体的安全主体。服务器级角色的权限作用域为服务器范围。 ("角色"类似于 Windows 操作系统中的"组"。)

SQL Server 提供了九种固定服务器角色。 无法更改授予固定服务器角色的权限。 从 SQL Server 2012 开始,您可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。

你可以将服务器级主体(SQL Server 登录名、Windows帐户和 Windows 组)添加到服务器级角色。 固定服务器角色的每个成员都可以将其他登录名添加到该同一角色。用户定义的服务器角色的成员则无法将其他服务器主体添加到角色。

下表显示了服务器级的固定角色及其权限

下表显示了固定数据库角色及其能够执行的操作。 所有数据库中都有这些角色。无法更改分配给固定数据库角色的权限

无法更改分配给固定数据库角色的权限。 下图显示了分配给固定数据库角色的权限:

SQL 2016有一些数据库的特殊权限

msdb角色

msdb数据库中包含下表显示的特殊用途的角色。

使用R Services

SQL Server(从 SQL Server vNext开始)

安装 R Services时,其他数据库角色可用于管理包

下面讲如何实现文章前面说的需求:

给某个用户查询所有数据库的权限

给某个用户只有备份数据库的权限

给一个用户只有指定数据库的权限

给一个用户只有某个表的权限

给某个用户查询所有数据库的权限

创建一个用户

USE [master] GO CREATE LOGIN [Test1]WITH PASSWORD=N'password@123'

使用Test1连接数据库实例

可以看到数据库列表, 但是无法访问数据库,

赋予test1对FinaceDemo的读取权限

USE [FinaceDemo] GO CREATE USER [Test1] FOR LOGIN [Test1] ALTER ROLE [db_datareader] ADD MEMBER [Test1] GO

这样就可以给test1用户对finacedemo的读取权限

但是test1 没有写入权限

这样就可以单独对test1赋予数据库的读取权限进行查看操作。

给某个用户只有备份数据库的权限

Test1 对于finacedemo无备份权限

赋予备份权限

ALTER ROLE [db_backupoperator] ADD MEMBER [Test1]

给一个用户只有指定数据库的权限

我们需要Test1只能看到 FinanceDemo,其他所有数据库都不能看到

执行下面脚本

USE [master] Deny VIEW any DATABASE TO Test1; go

运行后的效果

Test1 连接后看不到任何数据库

执行:

ALTER AUTHORIZATIONON DATABASE::FinanceDemo TO test1

完成后结果:

Test1能查看到赋予权限的数据库

给一个用户只有某个表的权限

创建测试用户test3

USE [master] GO CREATE LOGIN [Test3] WITH PASSWORD=N'password@123' -----赋予test2可以登录testDB USE [testdb] GO CREATE USER [Test3] FOR LOGIN [Test3] GO

赋予test3对于t2表的update和select权限 grant update on dbo.t2to test3 grant select on dbo.t2to test3 use testDB 查看test3用户获得的权限 exec sp_helprotect @username='test3'

可以看到用户test3拥有了t2的select和update权限

执行select * from t2

执行插入操作失败。

权限管理非常复杂,以上只是做了简单的介绍。需要更加详细的内容,需要自己去研究。在technet上可以找到更加详细的信息。

上述内容就是如何进行数据库权限分配的探讨,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

用户 数据 数据库 权限 角色 登录 服务 主体 服务器 身份 安全 只有 验证 分配 内容 备份 实体 成员 客户 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州紫鲸互联网科技有限公司 河南真二互联网科技有限公司 互联网 科技公司 互联网科技公司发展 迪茉互联网科技 睿民互联网科技 卓越科技互联网 招聘 山东吉时兔互联网科技有限公司 恒银科技与互联网金融 重庆互联网医院沙龙医盟信息科技 知域互联网科技有限公司大骗子 天津腾达互联网科技有限公司 爱医互联网络科技 互联网金融科技元年 南通创西澳互联网科技有限公司 智帮互联网科技公司最近动向 广州梦谷互联网科技有限公司领导 恒生科技指数 中概互联网 互联网金融金融科技 中国主要互联网科技公司 华服互联网科技靠谱吗 世界互联网领先科技成果 万达互联网科技 深圳市运趣互联网科技有限公司 剑昆互联网络科技有限公司临桂 千方科技属于互联网企业吗 互联网科技的全部知识 黑科技 体验场景 互联网大会 广州三三互联网科技有限公司 互联网科技大会大佬
0