Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

Oracle 数据库实例的数据库管理员常见系统任务

本部分介绍了如何在运行 Oracle 的 Amazon RDS 数据库实例上执行与系统相关的数据库管理员常见任务。为了提供托管服务体验,Amazon RDS 不允许通过 shell 访问数据库实例,而仅限访问某些需要高级特权的系统过程和表。

断开会话连接

Oracle 版本 11.2.0.4.v1 及更高版本不支持断开会话连接。

您可使用以下 Amazon RDS 过程 rdsadmin.rdsadmin_util.disconnect 通过终止专用服务器进程来断开当前会话连接。disconnect 过程具有以下参数。

参数名称 数据类型 默认值 必需 说明

sid

number

-

必需

会话标识符。

serial

number

-

必需

会话的序列号。

method

varchar

'IMMEDIATE'

可选

有效值为 'IMMEDIATE''POST_TRANSACTION'

以下示例断开一个会话:

Copy
begin rdsadmin.rdsadmin_util.disconnect( sid => sid, serial => serial_number); end; /

要获取会话标识符和会话序列号,请查询 V$SESSION 视图。以下示例获取用户 AWSUSER 的所有会话:

Copy
select SID, SERIAL#, STATUS from V$SESSION where USERNAME = 'AWSUSER';

数据库必须处于打开状态,才能使用此方法。有关断开会话连接的更多信息,请参阅 Oracle 文档中的 ALTER SYSTEM

取消会话

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.kill 终止会话。kill 过程具有以下参数。

参数名称 数据类型 默认值 必需 说明

sid

number

-

必需

会话标识符。

serial

number

-

必需

会话的序列号。

method

varchar

null

可选

有效值为 'IMMEDIATE''PROCESS'。适用于版本 11.2.0.4.v1 或更高版本。

以下示例终止一个会话:

Copy
begin rdsadmin.rdsadmin_util.kill( sid => sid, serial => serial_number); end; /

要获取会话标识符和会话序列号,请查询 V$SESSION 视图。以下示例获取用户 AWSUSER 的所有会话:

Copy
select SID, SERIAL#, STATUS from V$SESSION where USERNAME = 'AWSUSER';

如果您使用的是 11.2.0.4.v1 版或更高版本,则可指定 IMMEDIATEPROCESS 作为 method 参数的值。指定 PROCESS 作为该参数的值可让您终止与会话关联的进程。仅当使用 IMMEDIATE 作为 method 值未成功终止会话时,才应执行以上操作。

启用和禁用受限会话

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.restricted_session 启用和禁用受限会话。restricted_session 过程具有以下参数。

参数名称 数据类型 默认值 必需 说明

p_enable

布尔值

true

可选

设为 true 则启用受限会话;设为 false 则禁用受限会话。

以下示例介绍了如何启用和禁用受限会话。

Copy
/* Verify that the database is currently unrestricted. */ select LOGINS from V$INSTANCE; LOGINS ------- ALLOWED /* Enable restricted sessions */ exec rdsadmin.rdsadmin_util.restricted_session(p_enable => true); /* Verify that the database is now restricted. */ select LOGINS from V$INSTANCE; LOGINS ---------- RESTRICTED /* Disable restricted sessions */ exec rdsadmin.rdsadmin_util.restricted_session(p_enable => false); /* Verify that the database is now unrestricted again. */ select LOGINS from V$INSTANCE; LOGINS ------- ALLOWED

刷新共享池

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.flush_shared_pool 刷新共享池。flush_shared_pool 过程没有参数。

以下示例刷新共享池。

Copy
exec rdsadmin.rdsadmin_util.flush_shared_pool;

刷新缓冲区缓存

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.flush_buffer_cache 刷新缓冲区缓存。flush_buffer_cache 过程没有参数。

以下示例刷新缓冲区缓存。

Copy
exec rdsadmin.rdsadmin_util.flush_buffer_cache;

向 SYS 对象授予 SELECT 或 EXECUTE 特权

通常,您使用可包含多个对象的角色来传输特权。您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_util.grant_sys_object 向单个对象授予特权。此过程仅通过角色或直接授予来授予主账户已有的特权。Oracle 版本 11.2.0.4.v1 及更高版本支持向系统对象授予 SELECTEXECUTE 特权。

grant_sys_object 过程具有以下参数。

参数名称 数据类型 默认值 必需 说明

p_obj_name

varchar2

-

必需

要授予其权限的对象的名称。对象可以是目录、函数、程序包、过程、序列、表或视图。对象名称的拼写必须与其在 DBA_OBJECTS 中出现时的拼写完全相同。由于大多数系统对象都是用大写形式定义的,因此建议您先尝试这样做。

p_grantee

varchar2

-

必需

要向其授予权限的对象的名称。对象可以是架构或角色。

p_privilege

varchar2

null

必需

-

p_grant_option

布尔值

false

可选

设为 true,则使用 with grant option。Oracle 版本 11.2.0.4.v8、12.1.0.1.v5 和 12.1.0.2.v4 及更高版本支持 p_grant_option 参数。

以下示例将名为 V_$SESSION 的对象的 select 特权授予名为 USER1 的用户:

Copy
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SESSION', p_grantee => 'USER1', p_privilege => 'SELECT'); end; /

以下示例使用授予选项将名为 V_$SESSION 的对象的 select 特权授予名为 USER1 的用户:

Copy
begin rdsadmin.rdsadmin_util.grant_sys_object( p_obj_name => 'V_$SESSION', p_grantee => 'USER1', p_privilege => 'SELECT', p_grant_option => true); end; /

要能够授予针对某个对象的特权,您的账户必须具有通过使用授权选项或通过使用 with admin option 授予的角色直接为其授予的这些特权。在最常见的情况下,您可能希望授予已授予给 SELECT_CATALOG_ROLE 角色的针对 DBA 视图的 SELECT 特权。如果尚未使用 with admin option 将该角色直接授予您的用户,则您将无法转让此特权。如果您具有 DBA 特权,则可直接将该角色授予其他用户。

以下示例将 SELECT_CATALOG_ROLEEXECUTE_CATALOG_ROLE 授予 USER1。由于使用了 with admin option,因此,USER1 现在可向已获得 SELECT_CATALOG_ROLE 的 SYS 对象授予访问权。

Copy
grant SELECT_CATALOG_ROLE to USER1 with admin option; grant EXECUTE_CATALOG_ROLE to USER1 with admin option;

无需对已获得 PUBLIC 的对象重新授权。如果您使用 grant_sys_object 过程重新授予访问权,则此过程调用将成功。

向非主用户授予特权

您可以使用 SELECT_CATALOG_ROLE 角色向 SYS 架构中的多个对象授予 select 特权。SELECT_CATALOG_ROLE 角色向用户授予对数据字典视图的 SELECT 特权。以下示例向名为 user1 的用户授予角色 SELECT_CATALOG_ROLE

Copy
grant SELECT_CATALOG_ROLE to user1;

您可以使用 EXECUTE_CATALOG_ROLE 角色向 SYS 架构中的多个对象授予 execute 特权。EXECUTE_CATALOG_ROLE 角色向用户授予对数据字典中的程序包和过程的 EXECUTE 特权。以下示例向名为 user1 的用户授予角色 EXECUTE_CATALOG_ROLE

Copy
grant EXECUTE_CATALOG_ROLE to user1;

以下示例获取角色 SELECT_CATALOG_ROLEEXECUTE_CATALOG_ROLE 允许的权限:

Copy
select * from ROLE_TAB_PRIVS where ROLE in ('SELECT_CATALOG_ROLE','EXECUTE_CATALOG_ROLE') order by ROLE, TABLE_NAME asc;

以下示例创建一个名为 user1 的非主用户,授予 CREATE SESSION 特权并授予对名为 sh.sales 的数据库的 SELECT 特权:

Copy
create user user1 identified by password; grant CREATE SESSION to user1; grant SELECT on sh.sales TO user1;

修改 DBMS_SCHEDULER 作业

您可以使用 Oracle 过程 dbms_scheduler.set_attribute 修改 DBMS_SCHEDULER 作业。有关更多信息,请参阅 Oracle 文档中的 DBMS_SCHEDULERSET_ATTRIBUTE 过程

在使用 Amazon RDS 数据库实例时,在对象名称前面加上架构名称 SYS。以下示例设置星期一窗口对象的资源计划属性。

Copy
begin dbms_scheduler.set_attribute( name => 'SYS.MONDAY_WINDOW', attribute => 'RESOURCE_PLAN', value => 'resource_plan_1'); end; /

创建自定义函数来验证密码

您可以通过两种方式创建自定义密码验证函数。如果您希望使用标准验证逻辑,并将函数存储在 SYS 架构中,请使用 create_verify_function 过程。如果您希望使用自定义验证逻辑,或者不希望将函数存储在 SYS 架构中,请使用 create_passthrough_verify_fcn 过程。

create_verify_function 过程

Oracle 版本 11.2.0.4.v9 及更高版本、版本 12.1.0.1.v6 及更高版本、版本 12.1.0.2.v5 及更高版本支持 create_verify_function 过程。

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_password_verify.create_verify_function 创建自定义函数来验证密码。create_verify_function 过程具有以下参数。

参数名称 数据类型 默认值 必需 说明

p_verify_function_name

varchar2

-

必需

自定义函数的名称。将在 SYS 架构中为您创建此函数。为用户配置文件分配此函数。

p_min_length

number

8

可选

要求的字符的最小数量。

p_max_length

number

256

可选

允许的字符的最大数量。

p_min_letters

number

1

可选

要求的字母的最小数量。

p_min_uppercase

number

0

可选

要求的大写字母的最小数量。

p_min_lowercase

number

0

可选

要求的小写字母的最小数量。

p_min_digits

number

1

可选

要求的数字的最小数量。

p_min_special

number

0

可选

要求的特殊字符的最小数量。

p_min_different_chars

number

3

可选

要求的不同字符的最小数量。

p_disallow_username

布尔值

true

可选

设为 true 则禁止在密码中使用用户名。

p_disallow_reverse

布尔值

true

可选

设为 true 则禁止在密码中使用反向用户名。

p_disallow_db_name

布尔值

true

可选

设为 true 则禁止在密码中使用数据库或服务器名称。

p_disallow_simple_strings

布尔值

true

可选

设为 true 则禁止将简单字符串用作密码。

p_disallow_whitespace

布尔值

false

可选

设为 true 则禁止在密码中使用空格字符。

p_disallow_at_sign

布尔值

false

可选

设为 true 则禁止在密码中使用 @ 字符。

可以创建多个密码验证函数。

自定义函数的名称受到一些限制。自定义函数不能具有与现有系统对象相同的名称,此名称不能超过 30 个字符且必须包含下列字符串之一:PASSWORDVERIFYCOMPLEXITYENFORCESTRENGTH

下面的示例创建一个名为 CUSTOM_PASSWORD_FUNCTION 的函数。此函数要求密码具有至少 12 个字符、2 个大写字符、1 个数字和 1 个特殊字符,并且该密码禁止使用 @ 字符。

Copy
begin rdsadmin.rdsadmin_password_verify.create_verify_function( p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', p_min_length => 12, p_min_uppercase => 2, p_min_digits => 1, p_min_special => 1, p_disallow_at_sign => true); end; /

要查看验证函数的文本,请查询 DBA_SOURCE。以下示例获取名为 CUSTOM_PASSWORD_FUNCTION 的自定义密码函数的文本。

Copy
col text format a150 select TEXT from DBA_SOURCE where OWNER = 'SYS' and NAME = 'CUSTOM_PASSWORD_FUNCTION' order by LINE;

要将您的验证函数与用户配置文件关联,请使用 alter profile。以下示例将验证函数与 DEFAULT 用户配置文件关联。

Copy
alter profile DEFAULT limit PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;

要查看哪些用户配置文件与哪些验证函数关联,请查询 DBA_PROFILES。以下示例获取与名为 CUSTOM_PASSWORD_FUNCTION 的自定义验证函数关联的配置文件。

Copy
select * from DBA_PROFILES where RESOURCE = 'PASSWORD' and LIMIT = 'CUSTOM_PASSWORD_FUNCTION'; PROFILE RESOURCE_NAME RESOURCE LIMIT ------------------------- -------------------------------- -------- ------------------------ DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD CUSTOM_PASSWORD_FUNCTION

以下示例获取所有配置文件以及与之关联的密码验证函数。

Copy
select * from DBA_PROFILES where RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION'; PROFILE RESOURCE_NAME RESOURCE LIMIT ------------------------- -------------------------------- -------- ------------------------ DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD CUSTOM_PASSWORD_FUNCTION RDSADMIN PASSWORD_VERIFY_FUNCTION PASSWORD NULL

create_passthrough_verify_fcn 过程

Oracle 版本 11.2.0.4.v11 及更高版本、版本 12.1.0.2.v7 及更高版本支持 create_passthrough_verify_fcn 过程。

您可以使用 Amazon RDS 过程 rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn 创建自定义函数来验证密码。create_passthrough_verify_fcn 过程具有以下参数。

参数名称 数据类型 默认值 必需 说明

p_verify_function_name

varchar2

-

必需

自定义验证函数的名称。这是在 SYS 架构中为您创建的包装函数,它不包含任何验证逻辑。为用户配置文件分配此函数。

p_target_owner

varchar2

-

必需

自定义验证函数的架构所有者。

p_target_function_name

varchar2

-

必需

包含验证逻辑的现有自定义函数的名称。您的自定义函数必须返回布尔值。如果密码有效,您的函数应返回 true;如果密码无效应返回 false

以下示例创建的密码验证函数使用名为 PASSWORD_LOGIC_EXTRA_STRONG 的函数的逻辑。

Copy
begin rdsadmin.rdsadmin_password_verify.create_passthrough_verify_fcn( p_verify_function_name => 'CUSTOM_PASSWORD_FUNCTION', p_target_owner => 'TEST_USER', p_target_function_name => 'PASSWORD_LOGIC_EXTRA_STRONG'); end; /

要将验证函数与用户配置文件关联,请使用 alter profile。以下示例将验证函数与 DEFAULT 用户配置文件关联。

Copy
alter profile DEFAULT limit PASSWORD_VERIFY_FUNCTION CUSTOM_PASSWORD_FUNCTION;

设置自定义 DNS 服务器

Amazon RDS 支持对运行 Oracle 的数据库实例进行出站网络访问。 有关出站网络访问 (包括先决条件) 的更多信息,请参阅 将 utl_http、utl_tcp 和 utl_smtp 用于 Oracle 数据库实例

Amazon RDS Oracle 支持通过客户拥有的自定义域名服务 (DNS) 服务器解析 DNS。通过自定义 DNS 服务器,您可以仅解析 Amazon RDS 数据库实例中的完全限定域名。

自定义 DNS 名称服务器设置完成后,它需要 30 分钟将更改传播到您的数据库实例中。将更改传播到您的数据库实例后,需要进行 DNS 查找的所有出站网络流量将通过端口 53 查询您的 DNS 服务器。

要为您的 Oracle Amazon RDS 数据库实例设置自定义 DNS 服务器,请执行以下操作:

  • 在挂载到 VPC 的 DHCP 选项集中,将 domain-name-servers 选项设置为您的 DNS 名称服务器的 IP 地址。有关更多信息,请参阅 DHCP 选项集

    注意

    domain-name-servers 选项最多可接受四个值,但您的 Amazon RDS 数据库实例只使用第一个值。

  • 请确保您的 DNS 服务器可以解析所有查找查询,包括公有 DNS 名称、Amazon EC2 私有 DNS 名称和特定客户的 DNS 名称。如果出站网络流量中包含您的 DNS 服务器不能处理的 DNS 查找,您的 DNS 服务器必须已配置适当的上游 DNS 提供程序。

  • 请配置您的 DNS 服务器,以生成等于或小于 512 字节的用户数据报协议 (UDP) 响应。

  • 请配置您的 DNS 服务器,以生成等于或小于 1024 字节的传输控制协议 (TCP) 响应。

  • 配置您的 DNS 服务器,允许流量通过 Amazon RDS 数据库实例的端口 53 入站。如果您的 DNS 服务器在 Amazon VPC 中,此 VPC 的安全组必须包含以下入站规则:允许端口 53 上的 UDP 和 TCP 流量。如果您的 DNS 服务器不在 Amazon VPC 中,它必须具有适当的防火墙白名单,允许端口 53 上的 UDP 和 TCP 入站流量。

    有关更多信息,请参阅您的 VPC 的安全组添加和删除规则

  • 配置您的 Amazon RDS 数据库实例的 VPC,允许流量通过端口 53 出站。您的 VPC 安全组必须包含以下出站规则:允许端口 53 上的 UDP 和 TCP 流量。

    有关更多信息,请参阅您的 VPC 的安全组添加和删除规则

  • 必须正确配置 Amazon RDS 数据库实例和 DNS 服务器之间的路由路径,允许 DNS 流量。

    • 如果 Amazon RDS 数据库实例和 DNS 服务器不在同一 VPC 中,必须在它们之间设置对等连接。有关更多信息,请参阅什么是 VPC 对等?

相关主题