背景:目前略,后续补上
//创建用户
CREATE USER tpmeaccount IDENTIFIED BY 12345678;
//授权权限
GRANT CONNECT, RESOURCE TO tpmeaccount;
//登录, 以sysdba这个角色登录 , sys是用户名 /后面是密码
sqlplus sys/123456 as sysdba
// 需要授权一个角色给这个用户sys , 虽然我也不知道sys已经是最高级别的用户了, 这个还有什么用;
// 但是navicat连接要用到
grant sysdba to sys
//查询权限, 谁的权限grantee = 'SYSTEM';用户system的, 应该是不区分大小写的
SELECT * FROM dba_role_privs WHERE grantee = 'SYSTEM';
//强制刷新
ALTER SYSTEM CHECKPOINT;
//查看你的用户名
SELECT USER FROM DUAL;
//这一看就是导入的命令,如果报错可能是你的环境path没有配好。 注意orcl1 是服务名,
//dpdata1是你新建的的目录
impdp system/12345678@127.0.0.1:1521/orcl1 directory=dpdata1 file='prad121241015.dmp' full=y;
1.1OracleServiceORCL(必须启动)
OracleServiceORCL:数据库服务(数据库实例),是 Oracle 核心服务该服务是数据库启动
的基础,只有该服务启动,Oracle 数据库才能正常启动。
1.2OracleOraDb11g_home1TNSListener(必须启动)
//创建用户
//在sys下面
CREATE USER my_user_test1 IDENTIFIED BY 123456;
//
GRANT CREATE JOB TO SYS;
//查看这个用户的权限
SELECT privilege
FROM dba_sys_privs
WHERE grantee = 'SYS';
//单独查看某个权限有没有,比如说创建CREATE JOB,的权限
SELECT privilege
FROM dba_sys_privs
WHERE grantee = 'SCOTT' AND privilege = 'CREATE JOB';
DBA_SYS_PRIVS是一个视图
- 什么是job?
在 Oracle 数据库中,作业(Job)是一种可以自动执行的任务。作业可以用于定时运行 SQL 语句、发送电子邮件、执行数据导入/导出等任务。
作业由以下部分组成:
-
作业定义:作业定义包含了作业的名称、作业的执行计划(包括何时开始、何时结束、何时重新运行等)和作业的执行步骤(包括要执行的 SQL 语句、要发送的电子邮件等)。
-
作业调度:作业调度定义了作业的执行计划。作业调度可以基于时间(例如,每天、每周、每月等)或基于事件(例如,当某个表发生变化时)。
-
作业步骤:作业步骤定义了作业要执行的操作。作业步骤可以包含 SQL 语句、PL/SQL 过程、电子邮件发送等操作。
作业可以手动启动,也可以由作业调度自动启动。作业的状态可以通过 DBA_JOBS
数据字典视图来查看。
请注意,创建和管理作业需要 CREATE JOB
权限。如果您没有这个权限,您将无法创建新的作业。
在 Oracle 数据库中,CREATE JOB
是一个系统权限,它允许用户创建和管理数据库作业。数据库作业是数据库中可以自动执行的任务,例如定时运行 SQL 语句、发送电子邮件等。
如果您拥有 CREATE JOB
权限,您可以使用 DBMS_JOB
包来创建和管理数据库作业。以下是一个示例,它使用 DBMS_JOB
包创建了一个新的数据库作业:
DECLARE
job NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
job => job,
what => 'BEGIN my_procedure; END;',
next_date => SYSDATE,
interval => 'SYSDATE + 1/1440'
);
COMMIT;
END;
/
这个示例创建了一个新的数据库作业,它将在每分钟执行一次 my_procedure
过程。
如果您没有 CREATE JOB
权限,您将无法使用 DBMS_JOB
包来创建和管理数据库作业。在这种情况下,您可能需要联系您的数据库管理员,并请求他们为您分配 CREATE JOB
权限。
- ORA-01917: 用户或角色 ‘MASTEDATA’ 不存在什么意思
//查询所有的用户名
SELECT username FROM dba_users;
//给这个用户创建权限, MASTERDATA这个用户不加引号
GRANT CREATE JOB TO MASTERDATA;
- dba_users也是一个视图,类似dba_sys_privs , 是超级视图,这都是原来写好的
在 Oracle 数据库中,dba_sys_privs
数据字典视图包含了数据库中所有用户的系统权限信息。以下是一个示例查询,它将返回CREATE JOB
权限的信息:
SELECT grantee, privilege
FROM dba_sys_privs
WHERE privilege = 'CREATE JOB';
这个查询将返回拥有 CREATE JOB
权限的所有用户和权限。
如果您想查看特定用户的权限,您可以将 grantee
替换为您要查询的用户名,例如:
SELECT privilege FROM dba_sys_privs WHERE grantee = 'MASTEDATA' AND privilege = 'CREATE JOB';
这个查询将返回 MASTEDATA
用户是否拥有 CREATE JOB
权限。
如果您执行了 GRANT CREATE JOB TO MASTERDATA;
语句,然后执行 SELECT privilege FROM dba_sys_privs WHERE grantee = 'MASTEDATA' AND privilege = 'CREATE JOB';
语句仍然为空,这可能是因为以下原因:
-
权限尚未生效:在 Oracle 数据库中,权限的授予和撤销是立即生效的,但是新创建的用户可能需要重新连接到数据库才能使权限生效。您可以尝试断开并重新连接到数据库,然后再次执行查询。
-
权限被撤销:如果权限已经被撤销,那么查询将不会返回任何结果。您可以使用
REVOKE CREATE JOB FROM MASTERDATA;
语句来撤销权限。 -
权限被授予给其他角色:如果权限被授予给
MASTERDATA
用户所属的其他角色,那么查询将不会返回任何结果。您可以使用SELECT granted_role FROM dba_role_privs WHERE grantee = 'MASTEDATA';
语句来查看MASTERDATA
用户所属的所有角色。 -
权限被授予给其他用户:如果权限被授予给其他用户,那么查询将不会返回任何结果。您可以使用
SELECT grantee FROM dba_sys_privs WHERE privilege = 'CREATE JOB';
语句来查看拥有CREATE JOB
权限的所有用户。
//查询角色
SELECT granted_role FROM dba_role_privs WHERE grantee = 'MASTERDATA';
//查询固定权限
SELECT privilege FROM dba_sys_privs WHERE grantee = 'MASTERDATA' AND privilege = 'CREATE JOB';
- ORA-01017: invalid username/password; logon denied
常见问题之登录问题
ORA-01017: invalid username/password; logon denied
是一个常见的 Oracle 错误,它表示您在尝试登录数据库时提供了无效的用户名或密码。
以下是一些可能的解决步骤:
-
检查用户名和密码:请确保您在登录时输入的用户名和密码与数据库中的用户名和密码完全匹配,包括大小写和空格。
-
检查账户状态:如果您的账户被锁定或过期,您将无法登录。您可以使用
ALTER USER user_name ACCOUNT UNLOCK;
语句来解锁账户,或者使用ALTER USER user_name PASSWORD EXPIRE;
语句来使密码过期。
//怎么看用户解锁账户状态
SELECT account_status FROM dba_users WHERE username = 'MASTERDATA';
//结果是open
在 Oracle 数据库中,DBA_USERS
数据字典视图(可以理解SYS下自带的表)的 account_status
列表示用户的账户状态。以下是一些可能的值:
OPEN
:账户已解锁,并且可以使用。LOCKED
:账户已锁定,无法使用。EXPIRED
:账户已过期,无法使用。LOCKED(TIMED)
:账户已锁定,并且锁定时间未到。EXPIRED(GRACE)
:账户已过期,并且仍在宽限期。EXPIRED(GRACE+PASSWORD_LOCK)
: 账户已过期,并且宽限期已过,并且账户已被锁定。
因此,如果您看到 account_status
的值为 OPEN
,那么账户已解锁,并且可以使用。
- 检查账户权限:如果您的账户没有
CREATE SESSION
权限,您将无法登录。您可以使用GRANT CREATE SESSION TO user_name;
语句来授予CREATE SESSION
权限。
- 怎么看你的用户是否有这个
CREATE SESSION
权限?
//其实这个命令之前讲过,就是把privilege 换一下
SELECT privilege FROM dba_tab_privs WHERE grantee = 'MASTERDATA' AND privilege = 'CREATE SESSION';
-
两个表格区别一下
在 Oracle 数据库中,dba_sys_privs
和dba_tab_privs
都是数据字典视图,它们都包含了数据库中所有用户的权限信息,但是它们包含的信息类型不同。 -
dba_sys_privs
视图包含了数据库中所有用户的系统权限信息。系统权限是数据库级别的权限,例如CREATE TABLE
、CREATE USER
、CREATE SESSION
等。 -
dba_tab_privs
视图包含了数据库中所有用户的表级权限信息。表级权限是特定表或视图的权限,例如SELECT
、INSERT
、UPDATE
、DELETE
等。
如果您在 dba_tab_privs
视图中找不到 CREATE SESSION
权限,这可能是因为 CREATE SESSION
是一个系统权限,而不是表级权限。您应该使用 dba_sys_privs
视图来查看 CREATE SESSION
权限。
以下是一个示例查询,它将返回 CREATE SESSION
权限的信息:
SELECT grantee, privilege
FROM dba_sys_privs
WHERE privilege = 'CREATE SESSION';
这个查询将返回拥有 CREATE SESSION
权限的所有用户和权限。
- 检查网络连接:如果您的网络连接有问题,您可能无法登录。请确保您的网络连接稳定,并且数据库服务器正在运行。
如果以上步骤都无法解决问题,您可能需要联系您的数据库管理员或 Oracle 技术支持以获取更详细的帮助。
监听器配置
//我的
D:\oracleApp\product\11.2.0\dbhome_1\NETWORK\ADMIN
//你自己存放的位置
\product\11.2.0\dbhome_1\NETWORK\ADMIN
- 新的监听错误
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
找到这个配置文件
SELECT * FROM v$version;
结果
"BANNER"
"Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production"
"PL/SQL Release 11.2.0.1.0 - Production"
"CORE 11.2.0.1.0 Production"
"TNS for 64-bit Windows: Version 11.2.0.1.0 - Production"
"NLSRTL Version 11.2.0.1.0 - Production"
根据你要导入的类似mysql中的数据库,你需要先创建这几个用户。这个导出的日志中会有,同样报错的日志中也有;
这里的执行我都是在sys这个用户之下;
//创建用户MASTERDATA
CREATE USER MASTERDATA IDENTIFIED BY 123456;
GRANT CONNECT, RESOURCE TO MASTERDATA;
//创建用户INTEREST
CREATE USER INTEREST IDENTIFIED BY 123456;
GRANT CONNECT, RESOURCE TO INTEREST;
//创建用户 MONITORDATA
CREATE USER MONITORDATA IDENTIFIED BY 123456;
GRANT CONNECT, RESOURCE TO MONITORDATA;
//创建用户 trade
CREATE USER trade IDENTIFIED BY 123456;
GRANT CONNECT, RESOURCE TO trade;
//创建用户 query
CREATE USER query IDENTIFIED BY 123456;
GRANT CONNECT, RESOURCE TO query;
//错误, 查询表的数量
SELECT COUNT(*) AS table_count FROM all_tables WHERE owner = 'trade';
//正确, 查询表的数量
SELECT COUNT(*) AS table_count FROM all_tables WHERE owner = 'TRADE';
查看表空间用户名
SELECT username, default_tablespace, temporary_tablespace FROM dba_users WHERE username = 'TRADE';
查看标准版还是企业版
要查看 Oracle 数据库的版本(包括标准版或企业版),你可以使用以下 SQL 查询:
SELECT * FROM v$version;
这个查询将返回 Oracle 数据库的版本信息,包括 Oracle 数据库的名称、版本号、主机名和 Oracle 实例的名称。
在返回的结果中,你可以查找 BANNER
列,它将包含类似以下的字符串:
- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
- Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
这些字符串中的 “Enterprise Edition” 表示这是企业版,而 “Standard Edition” 表示这是标准版。
请注意,如果你没有足够的权限执行这个查询,你可能需要以 DBA 身份登录到数据库。
//创建用户MASTERDATA
CREATE USER MASTERDATA IDENTIFIED BY 12345678;
GRANT CONNECT, RESOURCE TO MASTERDATA;
//创建用户INTEREST
CREATE USER INTEREST IDENTIFIED BY 12345678;
GRANT CONNECT, RESOURCE TO INTEREST;
//创建用户 MONITORDATA
CREATE USER MONITORDATA IDENTIFIED BY 12345678;
GRANT CONNECT, RESOURCE TO MONITORDATA;
//创建用户 trade
CREATE USER trade IDENTIFIED BY 12345678;
GRANT CONNECT, RESOURCE TO trade;
//创建用户 query
CREATE USER query IDENTIFIED BY 12345678;
GRANT CONNECT, RESOURCE TO query;
select * from v$version;
-- 1.先看 directory 对象是否存在
select * from dba_directories t where t.directory_name = 'MYDIR';
-- 2.若不存在,则创建
create directory mydir as 'D:\mydir';
-- 授予 create 权限
grant create any directory to INTEREST;
-- 授予 read,write 权限
grant read, write on directory mydir to INTEREST;
-- 授予 create 权限
grant create any directory to MASTERDATA;
-- 授予 read,write 权限
grant read, write on directory mydir to MASTERDATA;
-- 授予 create 权限
grant create any directory to MONITORDATA;
-- 授予 read,write 权限
grant read, write on directory mydir to MONITORDATA;
-- 授予 create 权限
grant create any directory to trade;
-- 授予 read,write 权限
grant read, write on directory mydir to trade;
-- 授予 create 权限
grant create any directory to query;
-- 授予 read,write 权限
grant read, write on directory mydir to query;
-- 查看拥有 directory 相关权限的用户
select * from dba_sys_privs t where t.privilege like '%DIRECTORY%';
-- 查询拥有 read,write 相关权限的用户
select * from dba_tab_privs t where t.privilege in ('READ', 'WRITE');
-- 授予 create 权限
grant create any directory to MONITORDATA;
-- 授予 read,write 权限
grant read, write on directory mydir to MONITORDATA;
-- 查看拥有 directory 相关权限的用户
select * from dba_sys_privs t where t.privilege like '%DIRECTORY%';
-- 查询拥有 read,write 相关权限的用户
select * from dba_tab_privs t where t.privilege in ('READ', 'WRITE');
cmd下运行不要sql
-- (后台:MASTERDATA )表 : 223 , 视图:30
impdp system/12345678 DIRECTORY=mydir DUMPFILE=prad121241015.dmp transform=segment_attributes:N
-- (利息: INTEREST)
impdp system/12345678 DIRECTORY=mydir DUMPFILE=prin121241015.dmp transform=segment_attributes:N
-- (监控:MONITORDATA) 53个表 28个视图
impdp system/12345678 DIRECTORY=mydir DUMPFILE=prmo121241015.dmp transform=segment_attributes:N
-- 交易:trade)表203 , 视图两个
impdp system/12345678 DIRECTORY=mydir DUMPFILE=prtr121241015.dmp transform=segment_attributes:N
-- query
impdp system/12345678 DIRECTORY=mydir DUMPFILE=v2pmes241014.dmp transform=segment_attributes:N
sqlplus sys/12345678 as sysdba
看日志
要检查是否启用了审计功能,可以使用以下 SQL 查询:
检查审计表状态的这个字段
SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name = 'AUD$';
SELECT VALUE FROM v$parameter WHERE NAME = 'audit_trail';
解释结果
- 如果返回值为
NONE
,则表示没有启用审计。 - 如果返回值为
DB
,则表示启用了数据库级别的审计。 - 如果返回值为
OS
,则表示审计记录写入操作系统文件。 - 如果返回值为
ALL
,则表示所有操作都会被审计。
好的,让我们详细解释一下 AUD$
表中常见字段的含义:
常见字段及其含义
-
SESSIONID:
- 含义: 唯一标识一个数据库会话的 ID。
- 用途: 用于跟踪和关联审计记录与特定的数据库会话。
-
USERID:
- 含义: 执行操作的用户的 ID。
- 用途: 用于识别哪个数据库用户执行了操作。
-
USERNAME:
- 含义: 执行操作的用户名。
- 用途: 以更易读的方式表示用户。
-
OBJ_NAME:
- 含义: 相关数据库对象的名称,例如表或视图的名称。
- 用途: 确定操作影响的具体对象。
-
ACTION_NAME:
- 含义: 执行的操作类型,如
SELECT
、INSERT
、UPDATE
或DELETE
。 - 用途: 用于了解用户在数据库上执行了什么操作。
- 含义: 执行的操作类型,如
-
TIMESTAMP:
- 含义: 记录创建的时间,表示操作发生的具体时间。
- 用途: 用于审计和回溯,了解操作发生的时间点。
-
RETURNCODE:
- 含义: 操作的返回代码,指示操作成功(通常为 0)或失败(非 0 值)。
- 用途: 帮助判断操作的结果,便于问题追踪和审计。
-
OS_USER:
- 含义: 连接到数据库的操作系统用户的名称。
- 用途: 识别用户通过哪个操作系统账户访问数据库。
-
TERMINAL:
- 含义: 执行操作的终端的名称或描述。
- 用途: 帮助追踪哪个终端发起了数据库操作。
使用示例
通过查询 AUD$
表,您可以获得特定用户的操作记录,例如:
SELECT *
FROM AUD$
WHERE USERNAME = '特定用户';
这将列出所有与该用户相关的审计记录,包括他们执行的操作类型和时间。
结论
AUD$
表是监控和审计数据库活动的重要工具,可以帮助您跟踪用户活动、识别潜在问题并维护数据库安全。如果您还有其他具体问题或需要进一步解释,请告诉我!