创建和管理用户

学习目标

  1. 创建新的数据库用户
  2. 修改和删除现有的数据库用户
  3. 监控现有用户的信息
  4. 获取用户信息
    以下是基于MySQL数据库管理系统的操作步骤和示例,这些概念也可以适用于其他数据库系统,如PostgreSQL、SQL Server、Oracle等。

1. 创建新的数据库用户

在MySQL中创建新用户,可以使用以下SQL语句:

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
  • username 是你想要创建的用户名。
  • hostname 是允许该用户登录的主机,可以用%表示任何主机。
  • password 是该用户的密码。
    例如,创建一个名为newuser,密码为newpassword,可以从任何主机登录的用户:
CREATE USER 'newuser'@'%' IDENTIFIED BY 'newpassword';

2. 修改和删除现有的数据库用户

修改用户密码
ALTER USER 'username'@'hostname' IDENTIFIED BY 'new_password';

例如,将用户newuser的密码更改为newpassword2

ALTER USER 'newuser'@'%' IDENTIFIED BY 'newpassword2';
删除用户
DROP USER 'username'@'hostname';

例如,删除用户newuser

DROP USER 'newuser'@'%';

3. 监控现有用户的信息

你可以使用以下命令来监控用户的信息:

SHOW GRANTS FOR 'username'@'hostname';

例如,查看用户newuser的权限:

SHOW GRANTS FOR 'newuser'@'%';

4. 获取用户信息

你可以查询系统表来获取用户信息:

SELECT user, host FROM mysql.user;

这条命令会列出所有用户的用户名和允许登录的主机。
请根据你的数据库管理系统和实际情况调整上述命令。如果你使用的是其他数据库系统,命令可能会有所不同。


数据库用户和安全性相关

当然可以,以下是将这些术语及其解释组织成表格的形式:

术语 解释
用户与安全 指数据库中的用户实体及其相关的安全措施,确保只有授权用户可以访问数据库。
账户锁定 当用户多次尝试失败登录后,系统暂时锁定账户以防止未授权访问。
默认表空间 用户创建对象时,如果没有指定表空间,对象会被存储在默认表空间中。
认证机制 数据库用来验证用户身份的方法,如密码认证、Kerberos、SSL证书等。
临时表空间 用于存储临时数据的表空间,例如排序操作或复杂查询中产生的临时数据。
安全域 包含一组安全策略的集合,用于控制对数据库资源的访问,可以包含用户、角色等。
角色 权限的集合,可以分配给一个或多个用户,简化权限管理。
权限 控制用户能够执行的操作,如SELECT、INSERT、UPDATE、DELETE等。
表空间配额 限制用户在特定表空间中可以使用的最大空间。
直接权限 直接授予给用户的权限,与通过角色授予的权限相对。
资源限制 限制单个用户可以使用的数据库资源,如会话数、CPU时间等。

数据库模式的相关术语

术语 (英文术语) 描述
数据库模式 (Database Schema) 数据库中对象的命名集合。
用户 (User) 可以进行身份验证并拥有数据库访问权限的实体。创建用户时,会创建相应的模式。
模式关联 (Schema Association) 一个用户只能与一个模式相关联。
用户名/模式 (Username/Schema) 这两个术语通常可以互换使用,指的是同一个实体。
模式对象 (Schema Objects) 属于模式的一部分的对象。
表 (Table) 以行和列组织的相关数据的集合。
触发器 (Trigger) 特殊类型的存储过程,它会在特定事件发生时自动执行。
约束 (Constraint) 在表的数据上强制执行的规则,以维护数据完整性。
索引 (Index) 用于提高数据检索性能的数据结构。
视图 (View) 从一个或多个表(或视图)中派生的虚拟表。
序列 (Sequence) 用于生成唯一数值的数据库对象。
存储程序单元 (Stored Program Units) 包括存储过程、函数、包和触发器。
同义词 (Synonym) 数据库对象的别名,用于简化对象访问。
用户定义的数据类型 (User-defined Data Types) 用户根据需要创建的数据类型。
数据库链接 (Database Link) 允许访问远程数据库的连接。

创建数据库用户的检查清单(Checklist)

步骤 1: 识别用户必须存储对象的表空间

通常,表空间在数据库创建时就已经定义好了。你可以通过以下命令查看现有的表空间:

SHOW TABLESPACES;
步骤 2: 决定每个表空间的配额

在MySQL中,表空间配额不是直接管理的,但是你可以通过其他方式限制用户使用的资源。

步骤 3: 分配默认表space和临时表space

在MySQL中,创建用户时可以指定默认表空间和临时表空间:

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password'
DEFAULT TABLESPACE `default_tablespace`
TEMPORARY TABLESPACE `temp_tablespace`;
步骤 4: 创建用户

使用以下命令创建新用户:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

这里的 'newuser' 是新用户的名称,'localhost' 是用户可以连接的主机,'password' 是用户的密码。

步骤 5: 授予权限和角色给用户

授予用户权限的命令如下:

GRANT SELECT, INSERT, UPDATE, DELETE ON `database_name`.* TO 'newuser'@'localhost';

如果你想授予所有权限,可以使用:

GRANT ALL PRIVILEGES ON `database_name`.* TO 'newuser'@'localhost';

在MySQL中,角色(Roles)是在MySQL 8.0及以上版本中引入的。如果你想使用角色,可以这样做:
首先,创建一个角色:

CREATE ROLE 'role_name';

然后,给角色授予权限:

GRANT SELECT, INSERT, UPDATE, DELETE ON `database_name`.* TO 'role_name';

最后,将角色授予用户:

GRANT 'role_name' TO 'newuser'@'localhost';

确保在授予权限后刷新权限:

FLUSH PRIVILEGES;

创建新用户

在Oracle数据库中创建新用户(数据库认证)
CREATE USER aaron   # 创建一个名为 `aaron` 的新用户。
IDENTIFIED BY soccer  # 设置该用户的初始密码为 `soccer`。
DEFAULT TABLESPACE data  # 指定 `data` 表空间为该用户的默认表空间。
TEMPORARY TABLESPACE temp  # 指定 `temp` 表空间为该用户的临时表空间。
QUOTA 15M ON data   # 在 `data` 表空间上为该用户设置15MB的空间配额。
QUOTA 10M ON users  # 在 `users` 表空间上为该用户设置10MB的空间配额。
PASSWORD EXPIRE;  # 设置该用户的密码在首次登录时过期,需要用户更改密码。
操作系统认证
CREATE USER aaron -- 创建名为aaron的新用户
IDENTIFIED EXTERNALLY -- 使用操作系统认证
DEFAULT TABLESPACE USERS -- 设置默认表空间为USERS
TEMPORARY TABLESPACE temp -- 设置临时表空间为temp
QUOTA 15m ON data; -- 在data表空间上为用户设置15MB的配额

os_AUTHENT_PREFIX 初始化参数,它用于指定数据库用户名的前缀格式,默认值为 OPS$。这意味着,如果操作系统用户名为 oracleuser,那么对应的数据库用户名将是 OPS$oracleuser。以下是如何设置这个参数的示例:

ALTER SYSTEM SET os_AUTHENT_PREFIX='OPS$' SCOPE=SPFILE;

这条命令设置了 os_AUTHENT_PREFIX 参数,使其值为 OPS$,并且更改将在下一次数据库启动时生效,因为指定了 SCOPE=SPFILE
请注意,使用操作系统认证时,数据库用户名必须与操作系统用户名相对应,并且带有 os_AUTHENT_PREFIX 指定前缀。在您的例子中,如果操作系统用户名为 aaron,那么数据库用户名应该是 OPS$aaron

例子

下面是一个包含SQL命令和bash命令的代码块,每个命令后面都有注释解释其用途。

# 创建一个新用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password'; # 创建一个名为'newuser'的新用户,密码为'password'
# 授予用户权限
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost' WITH GRANT OPTION; # 给予'newuser'所有数据库的所有权限
# 设置一个数值字段的值为八十
UPDATE my_table SET my_column = 80 WHERE condition; # 更新'my_table'中的'my_column'字段,将符合条件的记录的值设置为80
# 查询年龄为八十的用户信息
SELECT * FROM users WHERE age = 80; # 从'users'表中选择所有年龄为80的用户的记录
-- 显示与认证相关的参数
SQL> show parameter auth;
-- 创建一个操作系统认证的用户
SQL> CREATE USER OPS$bbker IDENTIFIED EXTERNALLY DEFAULT TABLESPACE example;
       -- 创建一个名为OPS$bbker的用户,该用户将通过操作系统进行认证,并设置其默认表空间为example(注意:这通常与CREATE USER命令一起使用)
-- 授予用户创建会话的权限
SQL> grant create session to OPS$bbker;
       -- 授予用户OPS$bbker创建数据库会话的权限

用户在表空间的配额

有以下几种情况:

  1. 用户拥有的表出现了预期之外的增长。
  2. 应用程序得到了增强,需要额外的表或索引。
  3. 对象被重新组织,并放置到不同的表空间中。
    为了修改用户的表空间配额,可以输入以下命令:
ALTER USER aaron QUOTA 0 ON USERS;
  • ALTER USER:这是SQL语句的一部分,用于更改现有用户的各种属性。
  • aaron:指定要修改配额的用户名。
  • QUOTA:这是用于设置或修改用户在特定表空间上的磁盘配额的子句。
  • 0:指定用户在USERS表空间上的新配额,单位是M。在这个例子中,配额被设置为0,这意味着用户aaron在USERS表空间上将无法再存储任何数据。
  • ON USERS:指定要修改配额的表空间名称,在这个例子中是USERS表空间。

作用是撤销用户aaron在USERS表空间上的存储配额,从而防止该用户在该表空间中创建新的数据对象。如果用户之前在USERS表空间中有数据,他们仍然可以访问这些数据,但是不能增加新的数据,除非配额被重新设置。


相关视图

v$session 视图

v$session 视图提供了关于当前数据库会话的详细信息。用于诊断性能问题、识别长时间运行的查询、查看锁和等待信息等。

  • SID:会话标识符,唯一标识一个会话。
  • SERIAL#:会话序列号,与SID一起唯一标识一个会话。
  • AUDSID:审计会话ID。
  • USER#:用户标识号。
  • USERNAME:数据库用户名。
  • COMMAND:当前命令类型,例如 SELECTINSERT 等。
  • OWNERID:会话所有者标识。
  • TADDR:事务地址。
  • LOCKWAIT:会话当前等待的锁的地址。
  • STATUS:会话的状态,例如 ACTIVEINACTIVEKILLED 等。
  • SERVER:会话的服务类型,例如 DEDICATEDSHARED
  • SCHEMA#:会话模式的标识号。
  • SCHEMANAME:会话模式名称。
  • OSUSER:操作系统用户名。
  • PROCESS:操作系统进程标识符。
  • MACHINE:会话所在的机器名。
  • TERMINAL:会话使用的终端名。
  • PROGRAM:会话运行的程序名。
  • TYPE:会话类型,例如 USERBACKGROUND 等。
  • SQL_ADDRESS:当前SQL语句的地址。
  • SQL_HASH_VALUE:当前SQL语句的哈希值。
  • PREV_SQL_ADDR:前一个SQL语句的地址。
  • PREV_HASH_VALUE:前一个SQL语句的哈希值。
  • MODULE:会话的模块名。
  • ACTION:会话的动作名。
  • CLIENT_INFO:客户端信息。
  • FIXED_TABLE_SEQUENCE:固定表序列号。
    要查询 v$session 视图,可以使用以下SQL命令:
SELECT * FROM v$session;
SELECT SID, SERIAL#, USERNAME, STATUS, MACHINE, PROGRAM FROM v$session;
DBA_USERS 视图

DBA_USERS 视图包含了数据库中所有用户的信息,包括用户名、默认表空间、临时表空间、账户状态等。

-- 查询所有用户的详细信息
SELECT username, 
       default_tablespace, 
       temporary_tablespace, 
       account_status, 
       created
FROM dba_users;
-- 查询特定用户的信息
SELECT username, 
       default_tablespace, 
       temporary_tablespace, 
       account_status, 
       created
FROM dba_users
WHERE username = 'YOUR_USERNAME';
DBA_TS_QUOTAS 视图

DBA_TS_QUOTAS 视图提供了关于用户在表空间中的配额和使用情况的信息。

-- 查询所有用户的表空间配额信息
SELECT username, 
       tablespace_name, 
       bytes, 
       max_bytes, 
       block_size
FROM dba_ts_quotas;
-- 查询特定用户在特定表空间中的配额信息
SELECT username, 
       tablespace_name, 
       bytes, 
       max_bytes, 
       block_size
FROM dba_ts_quotas
WHERE username = 'YOUR_USERNAME'
  AND tablespace_name = 'YOUR_TABLESPACE_NAME';

你可能感兴趣的:(数据库,oracle,数据库)