SQL Server数据库管理员(DBA)的工作内容

SQL Server数据库管理员(DBA)的工作内容,第1张

在Microsoft SQL Server 系统中 数据库管理员(Database Administration 简称为DBA)是最重要的角色 DBA的工作目标就是确保Microsoft SQL Server 系统正常高效地运行 DBA的工作也是最繁忙的工作 无论是性能调整 还是灾难恢复 都离不开DBA的支持

一般地 作为一个DBA 至少应该做好以下 项任务

&# 任务一 安装和配置&# 任务二 容量规划&# 任务三 应用架构设计&# 任务四 管理数据库对象&# 任务五 存储空间管理&# 任务六 安全管理&# 任务七 备份和恢复&# 任务八 性能监视和调优&# 任务九 调度作业&# 任务十 网络管理&# 任务十一 高可用性和高可伸缩性管理&# 任务十二 故障解决

下面简单描述这些DBA的任务

任务一 安装和配置

DBA的第一项任务是安装和配置Microsoft SQL Server 软件系统 为顺利使用Microsoft SQL Server 软件创建良好的环境 无论是安装还是配置 都应该根据实际需要来进行 使得系统满足用户的实际需求 需要注意的是 系统配置不是一劳永逸的 应该随时根据需求的变化和环境的需要 进行监视和适当地调整

任务二 容量规划

容量规划是对整个Microsoft SQL Server 系统进行一个总体的规划 规划的重点应该放在解决瓶颈问题上 可以从内容和期限两个方面考虑系统的容量规划

从内容上来看 应该考虑的主要内容包括 硬件容量规划 软件规划 网络规划 硬件容量规划包括磁盘空间 CPU I/O等规划 软件规划包括 *** 作系统的安装和配置规划 数据库规划 数据库对象内容和数量规划等 网络规划包括网络硬件 网络软件和协议 网络客户数量流量和分布 网络拓扑结构等规划

从期限上来看 应该考虑短期 中期和长期规划 短期规划的目的是满足当前日常业务的需要 中期规划主要是满足业务发展和扩大的需要 长期规划主要是满足业务极限需要等 例如 如果预测某个系统的当前并发用户数量是 年后的用户可能达到 万 那么这时既不能按照 用户的需求来设计 也不能一下子按照 万用户的需求来设计 一定要采取一个折中的形式

任务三 应用架构设计

应用架构设计包括数据库设计 应用程序设计和相应的技术架构设计

数据库设计应该考虑数据库的逻辑需求 数据库的创建方式和数量 数据库数据文件和日志文件的物理位置等 一般情况下 可以在Microsoft SQL Server 系统成功安装之后 根据规划的目标 手工创建数据库

应用设计应该考虑开发工具的选择 API技术 内部资源和外部资源的结合 应用架构的分布等 需要强调是在应用设计时 DBA应该与开发人员共同工作 确保他们编写出优化的代码 尽可能地使用服务器的资源

技术架构设计主要包括表示层 逻辑层和数据层的分布 这些分布不应该考虑到硬件资源和用户需求 既不能片面地追求过高的硬件资源 也不能仅仅局限于当前的环境 一定要按照可扩展的观点来综合考虑

任务四 管理数据库对象

管理数据库对象是使用数据库的最基本 最重要的工作 这些对象包括表 索引 视图 存储过程 函数 触发器 同义词等 为了完成管理数据库对象的工作 DBA应该能够很好地回答诸如下面的这些问题

&# 系统应该包括哪些数据?&# 应该怎样存储这些数据?&# 应该在系统中创建哪些表?&# 应该在这些表中创建哪些索引 以便加速检索?&# 是否应该创建视图?为什么要创建这些视图?&# 应该创建哪些存储过程 函数 CLR对象?&# 应该在哪些表上创建触发器?应该针对哪些 *** 作创建触发器?&# 是否应该创建同义词?

任务五 存储空间管理

存储空间管理任务就是怎样为数据分配空间 怎样保持空间可以满足数据的不断增长 随着业务量的继续和扩大 数据库中的数据也会逐渐地增加 事务日志也不断地增加 存储空间管理任务主要围绕下面几个问题

&# 当前的数据库由那些数据文件组成?&# 事务日志的大小应该如何设置?&# 数据的增长速度是多大?&# 如何配置数据文件和日志文件的增长方式?&# 数据库中的数据何时可以清除或转移到其他地方?

任务六 安全管理

安全性是DBA重要的日常工作之一 安全管理的主要内容包括账户管理和权限管理 账户管理就是在数据库中应该增加哪些账户 这些账户应该组合成哪些角色等等 权限管理是对象权限和语句权限的管理 应该回答下面这些问题

&# 这些账户或角色应该使用哪些对象?&# 这些账户或角色应该对这些对象执行哪些 *** 作?&# 这些账户或角色应该在数据库中执行哪些 *** 作?&# 如何设置架构?如何建立架构和对象 架构和用户的关系?

任务七 备份和恢复

无论系统运行如何 系统的灾难性管理是不可缺少的 天灾 人祸 系统缺陷都有可能造成系统的瘫痪 失败 怎样解决这些灾难性问题呢?办法就是制订和实行备份和恢复策略 备份就是制作数据的副本 恢复就是将数据的副本复原到系统中 备份和恢复工作是DBA的一项持续性的重要工作 其执行频率根据数据的重要程度和系统的稳定程度来确定

任务八 性能监视和调优

根据企业的经营效益评价企业的管理水平 根据学生的考试成绩评价学生的学习好坏 作为一个大型软件系统 Microsoft SQL Server 系统的运行好坏必须得到正确地监视 评价和相应的调整 这是DBA的一项高级工作 借助一些工具和运行性能指标 DBA应该能够监视系统的运行 如果某些运行指标出现了问题 DBA应该及时地采取补救措施 使得系统始终保持高效运行状态

任务九 调度作业

DBA不可能一天 小时不停地盯住系统的运行 及时地执行某些指定的 *** 作 Microsoft SQL Server 系统提供了许多工具 DBA应该充分利用这些工具和机制 解决下面一些问题

&# 调度哪些作业应该由系统执行?&# 这些作业应该在何时执行?&# 如何确保这些作业可以正确地执行?&# 如果自动执行的作业执行失败时 应该如何处理?&# 如何使得系统可以均衡地执行相应的 *** 作?

任务十 网络管理

作为一种分布式的网络数据库 网络管理的任务更加的重要 Microsoft SQL Server 系统提供了网络管理工具和服务 DBA应该借助这些工具进行服务规划和管理网络 *** 作

任务十一 高可用性和高可伸缩性管理

作为一个DBA 必须保持系统具有高可用性和高可伸缩性 可用性是一项度量计算机系统正常运行时间的指标 可伸缩性描述应用程序可以接受的并发用户访问的数量问题 影响系统可用性的主要因素包括 网络可靠性 硬件故障 应用程序失败 *** 作系统崩溃 自然灾害等 无论是数据库系统管理员 还是应用程序设计人员 都应该最小化系统破坏的几率 最大化系统的可用性 在设计系统的可用性时 应该确定采取什么样的可用性策略来满足可用性的需求

可用性的需求可以通过 个方面描述 即运行的时间 连接性需求和数据的紧密和松散要求 在确定可用性的需求时 首先考虑系统的运行时间 一般地 数据库应用程序有两种运行时间 即在工作时间是可用的和在任何时间都是可用的 如果只是要求在工作时间是可用的 那么可以把系统的维护等工作安排在周末进行 但是 有许多应用程序要求每天运行 小时 每周运行 天 例如 在线超市等 这时必须采取措施保证系统总是运行的 不同的应用程序有不同的连接性要求 大多数的应用程序和电子商务解决方案要求采用可靠的网络连接 这时 要求永久性的在线连接 必须最小化各种异常现象的发生 有些应用程序允许用户离线使用 这时 系统的可用性要求降低了 大多数应用程序要求数据是同步使用的 用户对数据的请求 系统必须立即做出回应 这是紧密型的数据要求 这种情况必须保证系统的高可用性 有些应用程序不需要数据是同步的 对用户的请求可以延迟回应 这种要求是数据松散型的要求 这时系统的可用性需求比较低

任务十二 故障解决

lishixinzhi/Article/program/SQLServer/201405/30725

数据库级别的角色名称及说明

db_owner

固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除数据库。

db_securityadmin

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

db_accessadmin

固定数据库角色的成员可以为

Windows

登录名、Windows

组和

SQL

Server

登录名添加或删除数据库访问权限。

db_backupoperator

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

db_ddladmin

固定数据库角色的成员可以在数据库中运行任何数据定义语言

(DDL)

命令。

db_datawriter

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

db_datareader

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

db_denydatawriter

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

db_denydatareader

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

有关数据库级固定角色权限的特定信息,请参阅固定数据库角色的权限(数据库引擎)。

msdb

角色

msdb

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

msdb

角色名称及说明

db_ssisadmin

db_ssisoperator

db_ssisltduser

角色一直存在各个数据库中,比如 SQL Server、Oracle 等,MySQL 自从版本 8.0 release,引入了角色这个概念。

角色的概念

角色就是一组针对各种数据库权限的集合。比如,把一个角色分配给一个用户,那这个用户就拥有了这个角色包含的所有权限。一个角色可以分配给多个用户,另外一个用户也可以拥有多个角色,两者是多对多的关系。不过 MySQL 角色目前还没有提供类似于其他数据库的系统预分配的角色。比如某些数据库的 db_owner、 db_datareader 、 db_datawriter 等等。那接下来我分几个方面,来示例说明角色的使用以及相关注意事项。

示例 1:一个完整角色的授予步骤

用管理员创建三个角色:db_owner, db_datareader, db_datawriter

mysql>create role db_owner,db_datareader,db_datawriter

Query OK, 0 rows affected (0.02 sec)

mysql>grant all on ytt_new.* to db_owner

Query OK, 0 rows affected (0.01 sec)

mysql>grant select on ytt_new.* to db_datareader

Query OK, 0 rows affected (0.01 sec)

mysql>grant insert,delete,update on ytt_new.* to db_datawriter

Query OK, 0 rows affected (0.01 sec)

创建三个普通用户,分别为 ytt1、ytt2、ytt3。mysql>create user ytt1 identified by 'ytt',ytt2 identified by 'ytt',ytt3 identified by 'ytt'Query OK, 0 rows affected (0.01 sec)

分别授予这三个用户对应的角色。

-- 授权角色

mysql>grant db_owner to ytt1

Query OK, 0 rows affected (0.02 sec)

-- 激活角色

mysql>set default role db_owner to ytt1

Query OK, 0 rows affected (0.00 sec)

mysql>grant db_datareader to ytt2

Query OK, 0 rows affected (0.01 sec)

mysql>set default role db_datareader to ytt2

Query OK, 0 rows affected (0.01 sec)

mysql>grant db_datawriter to ytt3

Query OK, 0 rows affected (0.01 sec)

mysql>set default role db_datawriter to ytt3

Query OK, 0 rows affected (0.01 sec)

以上是角色授予的一套完整步骤。那上面有点非常规的地方是激活角色这个步骤。MySQL 角色在创建之初默认是没有激活的,也就是说创建角色,并且给一个用户特定的角色,这个用户其实并不能直接使用这个角色,除非激活了才可以。

示例 2:一个用户可以拥有多个角色

-- 用管理员登录并且创建用户

mysql>create user ytt4 identified by 'ytt'

Query OK, 0 rows affected (0.00 sec)

-- 把之前的三个角色都分配给用户ytt4.

mysql>grant db_owner,db_datareader,db_datawriter to ytt4

Query OK, 0 rows affected (0.01 sec)

-- 激活用户ytt4的所有角色.

mysql>set default role all to ytt4

Query OK, 0 rows affected (0.02 sec)

-- ytt4 用户登录

root@ytt-pc:/var/lib/mysql# mysql -uytt4 -pytt -P3304 -hytt-pc

...

-- 查看当前角色列表

mysql>select current_role()

+--------------------------------------------------------+

| current_role()                                         |

+--------------------------------------------------------+

| `db_datareader`@`%`,`db_datawriter`@`%`,`db_owner`@`%` |

+--------------------------------------------------------+

1 row in set (0.00 sec)

-- 简单创建一张表并且插入记录, 检索记录,完了删掉这张表

mysql>use ytt_new

Database changed

mysql>create table t11(id int)

Query OK, 0 rows affected (0.05 sec)

mysql>insert into t11 values (1)

Query OK, 1 row affected (0.02 sec)

mysql>select * from t11

+------+

| id   |

+------+

|    1 |

+------+

1 row in set (0.00 sec)

mysql>drop table t11

Query OK, 0 rows affected (0.04 sec)

示例 3:用户在当前 session 里角色互换

其实意思是说,用户连接到 MySQL 服务器后,可以切换当前的角色列表,比如由 db_owner 切换到 db_datareader。

-- 还是之前的用户ytt4, 切换到db_datareader

mysql>set role db_datareader

Query OK, 0 rows affected (0.00 sec)

mysql>select current_role()

+---------------------+

| current_role()      |

+---------------------+

| `db_datareader`@`%` |

+---------------------+

1 row in set (0.00 sec)

-- 切换后,没有权限创建表

mysql>create table t11(id int)

ERROR 1142 (42000): CREATE command denied to user 'ytt4'@'ytt-pc' for table 't11'

-- 切换到 db_owner,恢复所有权限。

mysql>set role db_owner

Query OK, 0 rows affected (0.00 sec)

mysql>create table t11(id int)

Query OK, 0 rows affected (0.04 sec)

示例 4:关于角色的两个参数

activate_all_roles_on_login:是否在连接 MySQL 服务时自动激活角色mandatory_roles:强制所有用户默认角色

-- 用管理员连接MySQL,

-- 设置默认激活角色

mysql>set global activate_all_roles_on_login=on

Query OK, 0 rows affected (0.00 sec)

-- 设置强制给所有用户赋予角色db_datareader

mysql>set global mandatory_roles='db_datareader'

Query OK, 0 rows affected (0.00 sec)

-- 创建用户ytt7.

mysql>create user ytt7

Query OK, 0 rows affected (0.01 sec)

-- 用 ytt7登录数据库

root@ytt-pc:/var/lib/mysql# mysql -uytt7 -P3304 -hytt-pc

...

mysql>show grants

+-------------------------------------------+

| Grants for ytt7@%                         |

+-------------------------------------------+

| GRANT USAGE ON *.* TO `ytt7`@`%`          |

| GRANT SELECT ON `ytt_new`.* TO `ytt7`@`%` |

| GRANT `db_datareader`@`%` TO `ytt7`@`%`   |

+-------------------------------------------+

3 rows in set (0.00 sec)

示例 5 :create role 和 create user 都有创建角色权限,两者有啥区别?

以下分别创建两个用户 ytt8、ytt9,一个给 create role,一个给 create user 权限。

-- 管理员登录,创建用户ytt8,ytt9.

mysql>create user ytt8,ytt9

Query OK, 0 rows affected (0.01 sec)

mysql>grant create role on *.* to ytt8

Query OK, 0 rows affected (0.02 sec)

mysql>grant create user on *.* to ytt9

Query OK, 0 rows affected (0.01 sec)

-- 用ytt8 登录,

root@ytt-pc:/var/lib/mysql# mysql -uytt8 -P3304 -hytt-pc

...

mysql>create role db_test

Query OK, 0 rows affected (0.02 sec)

-- 可以创建角色,但是不能创建用户

mysql>create user ytt10

ERROR 1227 (42000): Access deniedyou need (at least one of) the CREATE USER privilege(s) for this operation

mysql>\q

Bye

-- 用ytt9 登录

root@ytt-pc:/var/lib/mysql# mysql -uytt9 -P3304 -hytt-pc

...

-- 角色和用户都能创建

mysql>create role db_test2

Query OK, 0 rows affected (0.02 sec)

mysql>create user ytt10

Query OK, 0 rows affected (0.01 sec)

mysql>\q

Bye

那这里其实看到 create user 包含了 create role,create user 即可以创建用户,也可以创建角色。

示例 6:MySQL 用户也可以当角色来用

-- 用管理员登录,创建用户ytt11,ytt12.

mysql>create user ytt11,ytt12

Query OK, 0 rows affected (0.01 sec)

mysql>grant select on ytt_new.* to ytt11

Query OK, 0 rows affected (0.01 sec)

-- 把ytt11普通用户的权限授予给ytt12

mysql>grant ytt11 to ytt12

Query OK, 0 rows affected (0.01 sec)

-- 来查看 ytt12的权限,可以看到拥有了ytt11的权限

mysql>show grants for ytt12

+-----------------------------------+

| Grants for ytt12@%                |

+-----------------------------------+

| GRANT USAGE ON *.* TO `ytt12`@`%` |

| GRANT `ytt11`@`%` TO `ytt12`@`%`  |

+-----------------------------------+

2 rows in set (0.00 sec)

-- 在细化点,看看ytt12拥有哪些具体的权限

mysql>show grants for ytt12 using ytt11

+--------------------------------------------+

| Grants for ytt12@%                         |

+--------------------------------------------+

| GRANT USAGE ON *.* TO `ytt12`@`%`          |

| GRANT SELECT ON `ytt_new`.* TO `ytt12`@`%` |

| GRANT `ytt11`@`%` TO `ytt12`@`%`           |

+--------------------------------------------+

3 rows in set (0.00 sec)

示例 7:角色的撤销

角色撤销和之前权限撤销类似。要么 revoke,要么删除角色,那这个角色会从所有拥有它的用户上移除。

-- 用管理员登录,移除ytt2的角色

mysql>revoke db_datareader from ytt2

Query OK, 0 rows affected (0.01 sec)

-- 删除所有角色

mysql>drop role db_owner,db_datareader,db_datawriter

Query OK, 0 rows affected (0.01 sec)

-- 对应的角色也从ytt1上移除掉了

mysql>show grants for ytt1

+----------------------------------+

| Grants for ytt1@%                |

+----------------------------------+

| GRANT USAGE ON *.* TO `ytt1`@`%` |

+----------------------------------+

1 row in set (0.00 sec)

至此,我分了 7 个目录说明了角色在各个方面的使用以及注意事项,希望对大家有帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9979496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存