怎么用session向oracle数据库添加

怎么用session向oracle数据库添加,第1张

1 audit

用审记来记录用户的 *** 作信息

2 trigger

用系统触发器来记录用户登录

3 logmnr

从log文件中挖出用户登录信息

推荐使用第3种,不占用系统资源,而且很方便。

===============================

Oracle 中记录用户登录信息

我们可以使用 Oracle Audit 函数来记录用户登录信息,但是如果开放了 Audit 函数将会使Oracle 性能下降,甚至导致 Oracle 崩溃。那我们如何才能记录用户登录信息呢?其实我们可以通过建立触发器的方式来实现。方法如下:

1. 用 sys 用户登录 Oracle

2. 创建记录用户登录信息的表

CREATE TABLE LOG$INFORMATION

(

IDNUMBER(10),

USERNAME VARCHAR2(30),

LOGINTIME DATE,

TERMINAL VARCHAR2(50),

IPADRESS VARCHAR2(20),

OSUSERVARCHAR2(30),

MACHINE VARCHAR2(64),

PROGRAM VARCHAR2(64),

SID NUMBER,

SERIAL# NUMBER,

AUSID NUMBER

)

/

3. 创建一个 Sequence,作为登录信息的主键

CREATE SEQUENCE LOGIN_SEQ

minvalue 1

maxvalue 9999999999

start with 1

increment by 1

cache 20

/

4. 创建触发器,记录用户登录信息

CREATE OR REPLACE TRIGGER LOGIN_RECORD_TR

AFTER logon ON DATABASE

DECLARE

mtSession v$session%ROWTYPE

CURSOR cSession(iiQuerySid IN NUMBER) IS

SELECT * FROM v$session

WHERE audsid = iiQuerySid

BEGIN

OPEN cSession(userenv('SESSIONID'))

FETCH cSession INTO mtSession

IF cSession%FOUND AND SYS_CONTEXT ('USERENV','IP_ADDRESS') IS NOT NULL THEN

INSERT INTO log$information(

id,

username,

logintime,

terminal,

ipadress,

osuser,

machine,

program,

sid,

serial#,

ausid

) VALUES(

login_seq.nextval,

USER,

SYSDATE,

mtSession.Terminal,

SYS_CONTEXT ('USERENV','IP_ADDRESS'),

mtSession.Osuser,

mtSession.Machine,

mtSession.Program,

mtSession.Sid,

mtSession.Serial#,

userenv('SESSIONID')

)

END IF

CLOSE cSession

EXCEPTION

WHEN OTHERS THEN

RAISE

END

/

5. 将 SYS.LOG$INFORMATION 授权给需要查看登录记录的用户

Grant select on SYS.LOG$INFORMATION to XXX

/

=======================================

审计用户登录和登出

记录每个用户每次登录数据库和退出数据库的日期和事件。设置步骤如下:

1. 设置系统审计相关的参数

2. 重新启动数据库

3.以SYSTEM帐号登录数据库执行下列语句,设置CONNECT审计并检查是否设置成功:

SQL>connect system/password

SQL>audit connect

SQL>col user_name format a11

SQL>col audit_option format a14

SQL>select user_name, audit_option, success, failure

from sys.dba_stmt_audit_opts

USER_NAME AUDIT_OPTION SUCCESSFAILURE

----------- -------------- ---------- ----------

CREATE SESSION BY ACCESS BY ACCESS

4.查询 AUD$表就可以查看到审计结果了

SQL>col userid format a8

SQL>select sessionid, to_char(timestamp#,'DD-MON-YY:HH24:MI:SS') login,

userid, to_char(logoff$time,'DD-MON-YY:HH24:MI:SS') logoff

from sys.aud$ where userid='SCOTT'

SESSIONID LOGIN USERID LOGOFF

---------- ------------------ -------- ------------------

132 22-FEB-00:13:55:06 SCOTT22-FEB-00:14:04:05

注意:不同的版本的ORACLE数据库AUD$字典会有所不同,实际情况请参照你当前版本的数据库的AUD$表。

1.4.11 审计SYS用户的 *** 作(ORACLE 9i Release 2)

在ORACLE 9.2之前,SYS帐户是系统中的一个唯一不受审计的帐户。在ORACLE 9I Release 2和以后的版本中,通过一些设置就可以对SYS帐号进行审计。

在ORACLE 9.2以后的版本中,可以通过设置AUDIT_SYS_OPERATIONS可以实现对具有SYS/SYSDBA/SYSOPER权限的用户的审计。

1.4.12 使用WINDOWS 事件管理器来记录审计信息

和UNIX系统不同,WINDOWS的审计结果不是存储在 *** 作系统文件中,而是直接存储在WINDOWS 事件日志中。本节介绍如何配置数据库审计,并用事件管理器来查看审计记录。

在WINDOWS下设置数据库审计,需要按照如下的步骤:

1、配置审计

首先要确认WINDOWS的事件日志(EVENTLOG)服务是否启动。可以通过“控制面板/管理工具/服务”工具来查看。

然后通过修改ORACLE的参数(参数修改方法参见前面的关于ORACLE参数文件的描述)AUDIT_TRAIL:

AUDIT_TRAIL=0S

在WINDFOWS平台下要注意的是:

不管AUDIT_TRAIL设置为什么值,有部分ORACLE的 *** 作会记录在事件日志中

在WINDOWS下不支持AUDIT_FILE_DEST参数,如果设置了该参数,数据库会报错

LRM-00101: UNKNOWN PARAMETER NAME 'AUDIT_FILE_DEST'

ORA-01078: FAILURE IN PROCESSING SYSTEM PARAMETERS

在使用审计前,要确保事件日志有足够大的空间来存储审计信息

2、检查是否安装好AUDIT相关的对象

最简单的检查方法是看看AUD$是否存在。如果AUDIT相关对象安装不正确,可以通过%ORACLE_HOME%\rdbms\admin\cataudit.sql脚本来安装AUDIT相关对象。如果要删除审计,可以执行%ORACLE_HOME%\rdbms\admin\catnoaud.sql。

3、配置审计

在配置审计之前,首先要说明的是,审计是一种会带来额外开销的 *** 作。因此在可能的情况下,尽量减少审计 *** 作。另外,如果打开审计 *** 作,那么对一些数据库事件的审计是缺省的,这些审计事件包括:

实例关闭

通过SYSOPER和SYSDBA连接数据库

在WINDOWS下配置审计的步骤和在UNIX下配置审计类似,这里就不再描述了。审计信息会自动写入WINDOWS的事件日志种,通过事件管理器可以查看日志。

在 Oracle 数据库中,Session(会话)指的是一个连接到数据库实例的用户进程或线程。每个 Session 都有一个唯一的标识符,称为 Session ID(SID),用于区分不同的 Session。

Session 在 Oracle 中扮演着非常重要的角色,它们主要用于执行数据库 *** 作、管理事务、控制数据库资源等。具体来说,Session 可以完成以下几个主要的功能:

执行 SQL 语句:Session 可以通过 SQL 语句向数据库发出请求,并获取结果集。在执行 SQL 语句之前,Session 还需要进行身份验证和授权 *** 作。

管理事务:Session 可以启动和管理事务,包括提交事务、回滚事务等 *** 作。在多用户的并发环境中,Session 还需要处理并发访问带来的竞争条件和数据一致性问题。

控制数据库资源:Session 可以控制数据库资源的使用情况,包括 CPU、内存、磁盘等资源。在多用户的并发环境中,Session 还需要通过锁机制等手段,避免多个用户同时访问同一资源带来的问题。

监控和管理:Session 还可以用于监控和管理数据库实例的状态和性能。通过 Session,DBA 可以查看当前连接到数据库的用户和进程,以及相关的会话信息、等待事件等。

Session 是 Oracle 数据库中非常重要的概念,它们用于执行 SQL 语句、管理事务、控制数据库资源等。在多用户的并发环境中,Session 还需要处理并发访问带来的竞争条件和数据一致性问题,从而保证数据库的安全和可靠性。

这问题竟然还没有人回答。。。 我来

create session就是允许使用这个用户在服务器上创建session。通俗的说,就是允许这个用户登录。

例子:

SQL>conn / as sysdba

Connected.

// 建立一个新用户

SQL>create user testcreate identified by oracle

User created.

//尝试登录,报错,没有 CREATE SESSION 权限

SQL>conn testcreate/oracle

ERROR:

ORA-01045: user TESTCREATE lacks CREATE SESSION privilegelogon denied

Warning: You are no longer connected to ORACLE.

//授予create session权限

SQL>conn / as sysdba

Connected.

SQL>grant create session to testcreate

Grant succeeded.

//再次登录,成功

SQL>conn testcreate/oracle

Connected.


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

原文地址: https://outofmemory.cn/bake/11391247.html

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

发表评论

登录后才能评论

评论列表(0条)

保存