SQL Server 数据库安全之角色


一直以来数据库用户名为了方便,都是直接给与用户db_owner权限,这种做法是依然存在安全隐患,看看db_owner角色的权限说明

db_owner

db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除 SQL Server中的数据库。 (在 SQL Database  SQL 数据仓库中,某些维护活动需要服务器级别权限,并且不能由 db_owners执行。)

public

 

 

服务器级的固定角色

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

提供固定服务器角色是为了方便使用和向后兼容。 应尽可能分配更具体的权限。

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

 

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

 

 

服务器级的固定角色

描述

sysadmin

sysadmin 固定服务器角色的成员可以在服务器上执行任何活动。

serveradmin

serveradmin 固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。

securityadmin

securityadmin 固定服务器角色的成员可以管理登录名及其属性。 他们可以 GRANTDENY  REVOKE 服务器级权限。 他们还可以 GRANTDENY  REVOKE 数据库级权限(如果他们具有数据库的访问权限)。 此外,他们还可以重置 SQL Server 登录名的密码。

 

重要提示: 授予 数据库引擎 的访问权限和配置用户权限的能力使得安全管理员可以分配大多数服务器权限。 securityadmin 角色应视为与 sysadmin 角色等效。

processadmin

processadmin 固定服务器角色的成员可以终止在 SQL Server 实例中运行的进程。

setupadmin

setupadmin 固定服务器角色的成员可以使用 Transact-SQL 语句添加和删除链接服务器。 (使用Management Studio 时需要 sysadmin 成员资格。)

bulkadmin

bulkadmin 固定服务器角色的成员可以运行 BULK INSERT 语句。

diskadmin

diskadmin 固定服务器角色用于管理磁盘文件。

dbcreator

dbcreator 固定服务器角色的成员可以创建、更改、删除和还原任何数据库。

public

每个 SQL Server 登录名都属于 public 服务器角色。 如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的 public 角色的权限。 只有在希望所有用户都能使用对象时,才在对象上分配 Public 权限。 你无法更改具有 Public 角色的成员身份。

 

注意: public 与其他角色的实现方式不同,可通过 public 固定服务器角色授予、拒绝或调用权限。

数据库默认角色列表:

db_owner

db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除 SQL Server中的数据库。 (在 SQL Database  SQL 数据仓库中,某些维护活动需要服务器级别权限,并且不能由 db_owners执行。)

db_securityadmin

db_securityadmin 固定数据库角色的成员可以修改角色成员身份和管理权限。 向此角色中添加主体可能会导致意外的权限升级。

db_accessadmin

db_accessadmin 固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。

db_backupoperator

db_backupoperator 固定数据库角色的成员可以备份数据库。

db_ddladmin

db_ddladmin 固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。

db_datawriter

db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。

db_datareader

db_datareader 固定数据库角色的成员可以从所有用户表中读取所有数据。

db_denydatawriter

db_denydatawriter 固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。

db_denydatareader

db_denydatareader 固定数据库角色的成员不能读取数据库内用户表中的任何数据。

SQL Database 和 SQL 数据仓库的特殊角色

这些数据库角色仅存在于虚拟 master 数据库中。 他们的权限仅限于在 master 中执行的操作。 只能向这些角色添加 master 中的数据库用户。 无法向这些角色添加登录名,但可以基于登录名创建用户,然后向角色添加用户。 也可以向这些角色添加 master 中包含的数据库用户。

角色名称

描述

dbmanager

可以创建和删除数据库。 创建数据库的 dbmanager 角色的成员将成为该数据库的所有者,从而让该用户可作为 dbo 用户连接到该数据库。 Dbo 用户具有数据库中的所有数据库权限。 Dbmanager 角色的成员不一定具有访问非他们所有的数据库的权限。

loginmanager

可以创建和删除虚拟 master 数据库中的登录名。

 

参考这个列表,尝试规范一下角色分配

分配这两个角色

db_datawriter

db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。

db_datareader

db_datareader 固定数据库角色的成员可以从所有用户表中读取所有数据。

public

 

分配过后,,可以对表数据进行增删该查

按要求无法执行drop

似乎已经达到基本目的,继续测试

发现无法执行存储过程,报错信息如下:

查资料:

    1. ---------------------------------------------------------
    2. -- 创建用户角色,给角色赋存储过程执行权限, 将角色赋预某用户
    3. use [YOUR DB NAME]
    4. -- 建角色[db_YourDBName_Executor]
    5. create role [db_YourDBName_Executor] AUTHORIZATION [dbo];
    6. -- 授予角色执行的权限
    7. grant exec to [db_YourDBName_Executor];
    8. -- 将角色授予用户
    9. exec sp_addrolemember N'db_YourDBName_Executor',N'karl.li'
    10. ----------------------------------------------------------
    11. -- 给用户赋存储过程查看定义权限
    12. use [YOUR DB NAME]
    13. GRANT VIEW DEFINITION ON SCHEMA :: dbo to [Your User Name]
---------------------------------------------------------
GarsonZhang www.yesdotnet.com

来自 <https://blog.csdn.net/keenweiwei/article/details/48173765>

参考此写法,达到效果

执行以后能看到数据库角色中多了一个:

用户映射中,已经赋予了角色

分析代码:第11行 给用户赋存储过程查看定义权限

    1. -- 给用户赋存储过程查看定义权限
    2. use [YOUR DB NAME]
    3. GRANT VIEW DEFINITION ON SCHEMA :: dbo to [Your User Name]
---------------------------------------------------------
GarsonZhang www.yesdotnet.com

如果不执行这段代码,最直接的效果就是无法查看存储过程定义

查看配置:

数据库→安全性→架构→dbo→属性

 

 

 

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YES开发框架
上一篇:SQL字符串逗号隔开为表结构ufn_SplitEx
下一篇:在 SA 和 Windows 等账户都被禁用的情况下如何登录?
评论列表

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

SQL Server 数据库安全角色
GZDBHelper连接SQL Server 数据库
Python使用SQL Server数据库
sql server系统表详细说明 sys.system_objects
sql server系统表详细说明 sys.all_columns
SQL Server获得所有数据库,所有表试图和字段
sql server系统表详细说明 sys.server_triggers
sql server系统表详细说明 sys.sql_modules
SQL Server 数据库类型和.NET数据类型映射关系
sql server系统表详细说明 sys.columns
sql server系统表详细说明 sys.tables
sql server系统表详细说明 sys.parameters
sql server系统表详细说明 sys.system_parameters
sql server系统表详细说明 sys.stats
sql server系统表详细说明 sys.all_parameters
sql server系统表详细说明 sys.partitions
sql server系统表详细说明 sys.masked_columns
sql server系统表详细说明 sys.table_types
sql server系统表详细说明 sys.triggers
sql server系统表详细说明 sys.system_columns

热门标签
.NET Core .NET Reactor ag-grid AI发布 api安全 ASP.NET Core C#DLL加密 C#播放声音 C#代码混淆 C#代码加密 ChromeDriver Codex DateTime DBeaver devexpress devTool DLL混淆 edge.js EF EFCore Electron element-ui el-form el-table excel FastReport FileStream FolderBrowerDialog FolderSelectDialog form提交 git gridcontrol gridview input javascript json字符串 JS转换对象JSON jwt JWT授权 linq log Math MCP mitmproxy MVC MySQL Navicat netstat nginx node_modules NSwag Nuget Nuget镜像 number PowerShell pyinstaller python pythoncom python爬虫 python抓包 pywin32 redis Requests-html RestSharp Selenium sql SQL Server Swagger to-cms Visual Studio VSCode vue VueRouter vue路由 VUE页面通讯 Webpack Windows Windows服务 winform wmi xlrd yaml YESCMS YESWEB开发框架 白象 表单提交 播放声音 打开URL 代码混淆 弹窗提醒 端口占用 对象转换 分布式 公共字典 机器码 进程排查 静态资源 开发指南 路由参数 密钥 配置教程 配置文件 权限 人工智能 任务 任务调度 日期间隔 日志 日志记录 省市区 授权验证 数据库 四舍五入 文案 文件读取 文件夹选择 文件目录选择 问题排查 行政区域数据 页面通讯 中间件 CSharp 事务锁 工单系统 并发控制 重复提交 CMS Markdig Markdown markdown-it marked 技术选型 VS Code 开发工具 源代码管理 版本控制 Docker PostgreSQL 时区 部署排查 CMS架构 EF Core 主题系统 二次开发 插件系统 容器 运维命令 镜像清理 Linux NAS 远程挂载 飞牛 fnOS S/4HANA SAP GUI SAP HANA SAP R/3 SAP入门 SAP版本 ERP SAP SAP MM 库存管理 物料管理 采购管理 入门教程 SAP S/4HANA SPRO 企业结构 采购组织 MM01 物料主数据 物料类型 BP分组 业务伙伴 供应商主数据 ME41 RFQ 库存物料 采购流程 ME51 消耗性物料 科目分配 采购申请 AC03 ML81N 外部服务 服务主数据 Business Partner SAP培训 ME51N MM模块 Lean Services MM-SRV 外部服务采购 PIR 供应来源 采购主数据 采购信息记录 ME31K 框架协议 计划协议 采购合同 ME01 供应来源确定 货源清单 MEQ1 供应源确定 配额安排 配额评分 MD04 MD21 MRP 计划文件 需求计划 批量程序 MD01N MD02 MRP Live MD05 MM 物料计划 优化采购 供应源 采购订单 ME2A 供应商确认 采购监控 Flexible Workflow 凭证释放 采购审批 释放策略 实地盘点 物料凭证 货物移动 MIGO 收货 移动类型 已撤回 供应商退货 货物发出 STO 库存转储 转移过账 生产订单 预留 GR/IR MIRO 供应商发票 物流发票校验 OMR2 税码 FI PP SD 实操教程 MRBR OMR6 发票差异 交货成本 后续借记 MI01 实物盘点 盘点差异 公司代码 工厂 组织结构 OMS2 主数据定制 自动科目确定 BP角色 CVI 伙伴确定 编号范围 凭证类型 字段选择 FBN1 OMBT OMC2 会计凭证 OMJJ BOM 委外加工 项目类别L MRKO 供应商寄售 特殊库存K MRKON PIPE Pipeline 特殊库存P ERS MRIS 发票计划 周期性结算 里程碑付款 变更追踪 版本管理 采购凭证 SFTP WebDAV 网盘 飞牛fnOS AMPL HERS MPN 中文教程 库存确定 可用性检查 缺件检查 Output Management 消息确定 输出确定 分割评估 库存计价 评估类别 评估类型 PB00 RM0000 条件技术 采购定价 MM-FI集成 OBYC 库存估价 文本类型 文本采用 EFB EVO MSV SU3 用户参数 发票校验 合同参照 履约保留款 特别总账 预付款 Fiori Launchpad SAP Fiori 应用导航 用户体验 LSMW LTMC Migration Cockpit 数据迁移 BRFplus OPD Output Control My Inbox 审批流程 灵活工作流 SAP PP 外部加工 SAP QM 检验批 质量信息记录 采购收货 SAP PM 维护BOM 维护订单 SAP SD SAP Service 端到端流程 MM模块培训 FI-MM集成 供应商管理 审批配置 FICO入门 SAP FICO 财务配置 供应商税务 预扣税 House Bank 银行对账 客户清账 应收账款 FI控制 验证与替代 印度 GST 税务配置 F110 FBZP EWM入门 SAP EWM 仓库管理 OX14 成本核算 物料评估 后勤配置 物料组 价值更新 数量更新 PP-PI 流程制造 生产计划 容差配置 SAP事务码 SAP基础 TCODE Basis 事务代码 MMNR 编号区间 采购实操 组织架构 OMSF SAP实操 FI配置 端口修改 密码设置 数据库配置 远程访问 ABAP基础 SAP ABAP 内表 变量定义 常量 数据类型 ABAP SAP开发 变量 基础语法 系统变量 结构体 字符串处理 循环语句 控制语句 DDIC SE11 数据字典 透明表 ABAP开发 ALE EDI IDoc 增强技术 ABAP内表 HASHED TABLE SORTED TABLE STANDARD TABLE 基本概念 性能优化 PARAMETERS SELECT-OPTIONS SELECTION-SCREEN 报表程序 选择屏幕 F4帮助 Report事件 输入校验 ABAP SQL ABAP语法 Open SQL SELECT 数据库访问 IKuai IP修改 PVE 网络配置 虚拟化
联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码