数据库默认的四个成员具体是哪四个?是数据库设计中的基本概念吗?
- 内容介绍
- 文章标签
- 相关推荐
你可能遇到的痛点
在学习或使用数据库时常常会被以下问题困扰:
- 不同数据库程序的说法好像不一样。
- 这些成员是数据库设计中的基本概念还是程序自带的角色/使用者?
- 如果不清楚它们的职责,权限管理和安全配置就会手忙脚乱。
一、什么是“默认成员”
1️⃣ SQL Server 中的四个默认角色
- db_owner拥有该数据库内所有对象的完全控制权,包括创建、修改、删除对象还有授予/回收其他使用者权限。
- db_datareader只读权限,能够查询数据库中所有表和视图的数据。
- db_datawriter写入权限。能够向所有表插入、更新和删除数据,但不具备结构修改权。
- public所有登录使用者都会自动属于此角色。通常只授予最基本的访问权限,如连接数据库。
2️⃣ Oracle 中常见的四个默认使用者
- SYS程序管理员账户,拥有 DBA 角色而且存放整个数据字典。只能由程序维护,普通管理员不可更改其对象。
- SYSTEM用于创建和管理除数据字典外的其他程序对象。如视图、存储过程等,一样拥有 DBA 权限。老实说,
- SYSMANEnterprise Manager专用账户。用于监控和管理整个 Oracle 实例。
- DBSNMPOracle 监控工具的代理账户,用于收集性能统计信息。
3️⃣ MySQL / MariaDB 中的四个内置程序库——常被误认为是“默认成员”
-
information_schema -
performance_schema -
mysql
sys*注:上述库在 MySQL/MariaDB 中默认存在用于存放元数据、性能指标和设置,也算是“默认对象”。但它们并不是使用者/角色概念。
二、这些默认成员是设计概念吗?答案是否定的,说起来,
不是。
• 数据库设计关注的是实体→属性→关系→约束**等概念**。• 默认成员属于安全/权限管理层面**。它们帮助 DBA 快速搭建最小化权限模型,确保程序安全性。• 在实际项目中,你仍然需要根据业务需求自行创建业务角色。而不是直接使用这些程序自带的角色来做业务授权。
三、如何正确使用这些默认成员来解决你的痛点?
A. 权限最小化原则——先把默认角色撤掉,再自定义业务角色
-
默认角色。说起来,例如在 SQL Server 中:
rolemembers drm JOIN sys.databaseprincipals dp ON drm.roleprincipalid = dp.principalid JOIN sys.databaseprincipals mp ON drm.memberprincipalid = mp.principalid; 按理说,
撤销不必要的高危角色:If a developer only needs read‑only access。remove m from . Use:
reader ,grant it only permissions needed:
reader;GRANT SELECT ON dbo.Sales TO sales_reader;
B. 常见场景对应常用方法表格
| 业务场景 | 推荐使用哪类默认成员 为什么 | |
|---|---|---|
| 开发人员需要完整调试环境 | dbowner 或 SYSTEM | 仅在测试库里使用。高危操作应限制在生产库 |
| 报表查询员只读报表库 | dbdatareader / PUBLIC | 避免误删或误改数据 |
| ETL 作业需要写入临时表 | dbdatawriter + 对特定 schema 的 INSERT 权限 | 细粒度控制写入范围,提高安全性 |
| 运维监控工具 需要访问性能视图 | SYSMAN / DBSNMP 或 performanceschema | 专用账号避免混淆业务账号 |
| *以上示例仅供参考,请结合实际安全策略进行微调。 | ||
四、关键要点快速回顾 ✅️ 📌️ · ✅️ · ✅️ · ✅️ ͏✧ 💡 **主要结论**:
-
"默认四个成员"指的是程序预置的使用者/角色**,而非抽象的数据模型概念。
-
SQl Server →
"Oracle" → SYS 、SYSTEM 、SYSMAN 、DBSNMP**;-
"MySQL/MariaDB" 常误认为有四个 "member",是四个 **内置 system schemas**。
-
# **使用建议**:先审计已有权限 → 撤销高危预置 → 按业务创建细粒度自定义角色 → 最终将业务使用者加入对应角色,以实现最小权限原则。
五、常见问答 FAQ 🚀︎︎︎︎︎︎︎︎︎︎︎︎️🧭︎⚙️🛠️👨🏻💻👩🏽💻🧑🏽🔬📚🔐🗂️✨⏰🗒️🎯🚨🤔❓❔❓❕❔🙋🏼🙍🏼🙇🏽🙎🏻🙎🏾\t\t\t\t\t\
A:
答:取决于所用 RDBMS——SQL Server 为 `db_owner` `db_datareader` `db_datawriter` `public`;Oracle 为 `SYS` `SYSTEM` `SYSMAN` `DBSNMP`;怎么说呢,MySQL/MariaDB 则是4 个内部 schema。不算真正意义上的 “member”。
A:
答:不算。它们属于安全/运维层面** 的预置身份。用来较快完成初始化授权,而非 ER 图、范式或三级模式等设计概念。
A:
答:① 创建自定义 Role/User;② 按需授予 SELECT / INSERT / UPDATE / DELETE 等 DML 权限;③ 将业务账号加入该 Role;④ 使用审计日志确认未出现越权操作。
这篇文章约 950 字,阅读时间约 4 分钟。如果还有问题,请在评论区留言或参考官方文档:《SQL Server 权限与安全》《Oracle Database Administrator's Guide》。
"Oracle" → SYS 、SYSTEM 、SYSMAN 、DBSNMP**;-
"MySQL/MariaDB" 常误认为有四个 "member",是四个 **内置 system schemas**。
-
# **使用建议**:先审计已有权限 → 撤销高危预置 → 按业务创建细粒度自定义角色 → 最终将业务使用者加入对应角色,以实现最小权限原则。
五、常见问答 FAQ 🚀︎︎︎︎︎︎︎︎︎︎︎︎️🧭︎⚙️🛠️👨🏻💻👩🏽💻🧑🏽🔬📚🔐🗂️✨⏰🗒️🎯🚨🤔❓❔❓❕❔🙋🏼🙍🏼🙇🏽🙎🏻🙎🏾\t\t\t\t\t\
A:
答:取决于所用 RDBMS——SQL Server 为 `db_owner` `db_datareader` `db_datawriter` `public`;Oracle 为 `SYS` `SYSTEM` `SYSMAN` `DBSNMP`;怎么说呢,MySQL/MariaDB 则是4 个内部 schema。不算真正意义上的 “member”。
A:
答:不算。它们属于安全/运维层面** 的预置身份。用来较快完成初始化授权,而非 ER 图、范式或三级模式等设计概念。
A:
答:① 创建自定义 Role/User;② 按需授予 SELECT / INSERT / UPDATE / DELETE 等 DML 权限;③ 将业务账号加入该 Role;④ 使用审计日志确认未出现越权操作。
这篇文章约 950 字,阅读时间约 4 分钟。如果还有问题,请在评论区留言或参考官方文档:《SQL Server 权限与安全》《Oracle Database Administrator's Guide》。
你可能遇到的痛点
在学习或使用数据库时常常会被以下问题困扰:
- 不同数据库程序的说法好像不一样。
- 这些成员是数据库设计中的基本概念还是程序自带的角色/使用者?
- 如果不清楚它们的职责,权限管理和安全配置就会手忙脚乱。
一、什么是“默认成员”
1️⃣ SQL Server 中的四个默认角色
- db_owner拥有该数据库内所有对象的完全控制权,包括创建、修改、删除对象还有授予/回收其他使用者权限。
- db_datareader只读权限,能够查询数据库中所有表和视图的数据。
- db_datawriter写入权限。能够向所有表插入、更新和删除数据,但不具备结构修改权。
- public所有登录使用者都会自动属于此角色。通常只授予最基本的访问权限,如连接数据库。
2️⃣ Oracle 中常见的四个默认使用者
- SYS程序管理员账户,拥有 DBA 角色而且存放整个数据字典。只能由程序维护,普通管理员不可更改其对象。
- SYSTEM用于创建和管理除数据字典外的其他程序对象。如视图、存储过程等,一样拥有 DBA 权限。老实说,
- SYSMANEnterprise Manager专用账户。用于监控和管理整个 Oracle 实例。
- DBSNMPOracle 监控工具的代理账户,用于收集性能统计信息。
3️⃣ MySQL / MariaDB 中的四个内置程序库——常被误认为是“默认成员”
-
information_schema -
performance_schema -
mysql
sys*注:上述库在 MySQL/MariaDB 中默认存在用于存放元数据、性能指标和设置,也算是“默认对象”。但它们并不是使用者/角色概念。
二、这些默认成员是设计概念吗?答案是否定的,说起来,
不是。
• 数据库设计关注的是实体→属性→关系→约束**等概念**。• 默认成员属于安全/权限管理层面**。它们帮助 DBA 快速搭建最小化权限模型,确保程序安全性。• 在实际项目中,你仍然需要根据业务需求自行创建业务角色。而不是直接使用这些程序自带的角色来做业务授权。
三、如何正确使用这些默认成员来解决你的痛点?
A. 权限最小化原则——先把默认角色撤掉,再自定义业务角色
-
默认角色。说起来,例如在 SQL Server 中:
rolemembers drm JOIN sys.databaseprincipals dp ON drm.roleprincipalid = dp.principalid JOIN sys.databaseprincipals mp ON drm.memberprincipalid = mp.principalid; 按理说,
撤销不必要的高危角色:If a developer only needs read‑only access。remove m from . Use:
reader ,grant it only permissions needed:
reader;GRANT SELECT ON dbo.Sales TO sales_reader;
B. 常见场景对应常用方法表格
| 业务场景 | 推荐使用哪类默认成员 为什么 | |
|---|---|---|
| 开发人员需要完整调试环境 | dbowner 或 SYSTEM | 仅在测试库里使用。高危操作应限制在生产库 |
| 报表查询员只读报表库 | dbdatareader / PUBLIC | 避免误删或误改数据 |
| ETL 作业需要写入临时表 | dbdatawriter + 对特定 schema 的 INSERT 权限 | 细粒度控制写入范围,提高安全性 |
| 运维监控工具 需要访问性能视图 | SYSMAN / DBSNMP 或 performanceschema | 专用账号避免混淆业务账号 |
| *以上示例仅供参考,请结合实际安全策略进行微调。 | ||
四、关键要点快速回顾 ✅️ 📌️ · ✅️ · ✅️ · ✅️ ͏✧ 💡 **主要结论**:
-
"默认四个成员"指的是程序预置的使用者/角色**,而非抽象的数据模型概念。
-
SQl Server →
"Oracle" → SYS 、SYSTEM 、SYSMAN 、DBSNMP**;-
"MySQL/MariaDB" 常误认为有四个 "member",是四个 **内置 system schemas**。
-
# **使用建议**:先审计已有权限 → 撤销高危预置 → 按业务创建细粒度自定义角色 → 最终将业务使用者加入对应角色,以实现最小权限原则。
五、常见问答 FAQ 🚀︎︎︎︎︎︎︎︎︎︎︎︎️🧭︎⚙️🛠️👨🏻💻👩🏽💻🧑🏽🔬📚🔐🗂️✨⏰🗒️🎯🚨🤔❓❔❓❕❔🙋🏼🙍🏼🙇🏽🙎🏻🙎🏾\t\t\t\t\t\
A:
答:取决于所用 RDBMS——SQL Server 为 `db_owner` `db_datareader` `db_datawriter` `public`;Oracle 为 `SYS` `SYSTEM` `SYSMAN` `DBSNMP`;怎么说呢,MySQL/MariaDB 则是4 个内部 schema。不算真正意义上的 “member”。
A:
答:不算。它们属于安全/运维层面** 的预置身份。用来较快完成初始化授权,而非 ER 图、范式或三级模式等设计概念。
A:
答:① 创建自定义 Role/User;② 按需授予 SELECT / INSERT / UPDATE / DELETE 等 DML 权限;③ 将业务账号加入该 Role;④ 使用审计日志确认未出现越权操作。
这篇文章约 950 字,阅读时间约 4 分钟。如果还有问题,请在评论区留言或参考官方文档:《SQL Server 权限与安全》《Oracle Database Administrator's Guide》。
"Oracle" → SYS 、SYSTEM 、SYSMAN 、DBSNMP**;-
"MySQL/MariaDB" 常误认为有四个 "member",是四个 **内置 system schemas**。
-
# **使用建议**:先审计已有权限 → 撤销高危预置 → 按业务创建细粒度自定义角色 → 最终将业务使用者加入对应角色,以实现最小权限原则。
五、常见问答 FAQ 🚀︎︎︎︎︎︎︎︎︎︎︎︎️🧭︎⚙️🛠️👨🏻💻👩🏽💻🧑🏽🔬📚🔐🗂️✨⏰🗒️🎯🚨🤔❓❔❓❕❔🙋🏼🙍🏼🙇🏽🙎🏻🙎🏾\t\t\t\t\t\
A:
答:取决于所用 RDBMS——SQL Server 为 `db_owner` `db_datareader` `db_datawriter` `public`;Oracle 为 `SYS` `SYSTEM` `SYSMAN` `DBSNMP`;怎么说呢,MySQL/MariaDB 则是4 个内部 schema。不算真正意义上的 “member”。
A:
答:不算。它们属于安全/运维层面** 的预置身份。用来较快完成初始化授权,而非 ER 图、范式或三级模式等设计概念。
A:
答:① 创建自定义 Role/User;② 按需授予 SELECT / INSERT / UPDATE / DELETE 等 DML 权限;③ 将业务账号加入该 Role;④ 使用审计日志确认未出现越权操作。
这篇文章约 950 字,阅读时间约 4 分钟。如果还有问题,请在评论区留言或参考官方文档:《SQL Server 权限与安全》《Oracle Database Administrator's Guide》。

