- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ORACLE查看当前账号的相关信息由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
关于oracle数据库的账号,我们在维护数据库的时候,偶尔可能需要获取一些特殊信息。例如,账号的创建时间、账号的状态、账号的锁定时间.....。正常情况下,我们可以通过dba_users获取大部分相关信息。但是有一些特殊信息,还必须通过不常用底层基表sys.user$来获取.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
sql>
desc
dba_users;
name
null
? type
----------------------------------------- -------- ----------------------------
username
not
null
varchar2(30)
user_id
not
null
number
password
varchar2(30)
account_status
not
null
varchar2(32)
lock_date
date
expiry_date
date
default_tablespace
not
null
varchar2(30)
temporary_tablespace
not
null
varchar2(30)
created
not
null
date
profile
not
null
varchar2(30)
initial_rsrc_consumer_group varchar2(30)
external_name varchar2(4000)
|
其实我们经常使用的dba_users是同义词,对应sys.dba_users这个视图。如果你想查看sys.dba_users的定义,可以通过下面方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
--oracle 10g
sql>
select
dbms_metadata.get_ddl(
'view'
,
'dba_users'
,
'sys'
)
from
dual;
create
or
replace
force
view
"sys"
.
"dba_users"
(
"username"
,
"user_id"
,
"password"
,
"account_status"
,
"lock_date"
,
"expiry_date"
,
"default_tablespace"
,
"temporary_tablespace"
,
"created"
,
"profile"
,
"initial_rsrc_consumer_group"
,
"external_name"
)
as
select
u.
name
, u.
user
#, u.
password
,
m.status,
decode(u.astatus, 4, u.ltime,
5, u.ltime,
6, u.ltime,
8, u.ltime,
9, u.ltime,
10, u.ltime, to_date(
null
)),
decode(u.astatus,
1, u.exptime,
2, u.exptime,
5, u.exptime,
6, u.exptime,
9, u.exptime,
10, u.exptime,
decode(u.ptime,
''
, to_date(
null
),
decode(pr.limit#, 2147483647, to_date(
null
),
decode(pr.limit#, 0,
decode(dp.limit#, 2147483647, to_date(
null
), u.ptime +
dp.limit#/86400),
u.ptime + pr.limit#/86400)))),
dts.
name
, tts.
name
, u.ctime, p.
name
,
nvl(cgm.consumer_group,
'default_consumer_group'
),
u.ext_username
from
sys.
user
$ u
left
outer
join
sys.resource_group_mapping$ cgm
on
(cgm.attribute =
'oracle_user'
and
cgm.status =
'active'
and
cgm.value = u.
name
),
sys.ts$ dts, sys.ts$ tts, sys.profname$ p,
sys.user_astatus_map m, sys.profile$ pr, sys.profile$ dp
where
u.datats# = dts.ts#
and
u.resource$ = p.profile#
and
u.tempts# = tts.ts#
and
u.astatus = m.status#
and
u.type# = 1
and
u.resource$ = pr.profile#
and
dp.profile# = 0
and
dp.type#=1
and
dp.resource#=1
and
pr.type# = 1
and
pr.resource# = 1
|
通过上面的视图定义,我们可以知道,大部分数据来自于底层基表sys.user$。关于表sys.user$的结构如下,我们可以从sql.bsq中可以看到sys.user$的定义.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
sql>
desc
sys.
user
$
name
null
? type
----------------------------------------- -------- ----------------------------
user
#
not
null
number
name
not
null
varchar2(30)
type#
not
null
number
password
varchar2(30)
datats#
not
null
number
tempts#
not
null
number
ctime
not
null
date
ptime
date
exptime
date
ltime
date
resource$
not
null
number
audit$ varchar2(38)
defrole
not
null
number
defgrp# number
defgrp_seq# number
astatus
not
null
number
lcount
not
null
number
defschclass varchar2(30)
ext_username varchar2(4000)
spare1 number
spare2 number
spare3 number
spare4 varchar2(1000)
spare5 varchar2(1000)
spare6
date
|
其中,我们可以获取一下关键字段信息,具体如下 。
1
2
3
4
5
6
7
|
name
用户(
user
)或角色(role)的名字
type# 0表示role,1表示
user
ctime 用户的创建时间
ptime 密码最后一次修改时间
exptime 密码过期的时间
ltime 账号最后一次锁定的时间
lcount 用户登录失败次数。
|
下面我们简单测试验证一下, 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
sql>
create
user
test identified
by
"test#1232134$#3"
default
tablespace tbs_test_data
temporary
tablespace
temp
;
user
created.
sql>
grant
connect
to
test;
sql> @get_user_info.sql
session altered.
enter value
for
user_name: test
old 9:
where
name
=(
'&user_name'
)
new 9:
where
name
=(
'test'
)
name
type# ctime ptime exptime ltime lcount
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
test 1 2021-06-10 14:10:01 2021-06-10 14:10:01 0
sql>
alter
user
test identified
by
"ker124"
;
user
altered.
sql> @get_user_info.sql
session altered.
enter value
for
user_name: test
old 9:
where
name
=(
'&user_name'
)
new 9:
where
name
=(
'test'
)
name
type# ctime ptime exptime ltime lcount
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
test 1 2021-06-10 14:10:01 2021-06-10 14:10:50 0
sql>
alter
user
test account lock;
user
altered.
sql> @get_user_info.sql
session altered.
enter value
for
user_name: test
old 9:
where
name
=(
'&user_name'
)
new 9:
where
name
=(
'test'
)
name
type# ctime ptime exptime ltime lcount
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
test 1 2021-06-10 14:10:01 2021-06-10 14:10:50 2021-06-10 14:11:27 0
sql>
|
其中get_user_info.sql的脚本如下 。
1
2
3
4
5
6
7
8
9
10
11
|
$ more get_user_info.sql
alter
session
set
nls_date_format=
'yyyy-mm-dd hh24:mi:ss'
;
select
name
, type#
, ctime
, ptime
, exptime
, ltime
, lcount
from
user
$
where
name
=(
'&user_name'
);
|
另外,我们来测试一下账号登录失败次数,在实验前先解锁账号,用错误的账号密码尝试登录数据库,你会发现lcount就变成1了.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
sql> @get_user_info.sql
session altered.
enter value
for
user_name: test
old 9:
where
name
=(
'&user_name'
)
new 9:
where
name
=(
'test'
)
name
type# ctime ptime exptime ltime lcount
------------------------------ ---------- ------------------- ------------------- ------------------- ------------------- ----------
test 1 2021-06-10 14:10:01 2021-06-10 14:10:50 2021-06-10 14:11:27 1
sql>
|
那么这个lcount字段的值是一直累加到超过阈值锁定呢?还是中间会清零呢?什么情况下会清零呢? 如果你使用正确的密码成功登录数据库后,你会发现lcount的值就清零了。如下截图所示:
1
2
3
4
5
6
7
8
9
|
$ sqlplus /nolog
sql*plus: release 10.2.0.4.0 - production
on
thu jun 10 14:30:41 2021
copyright (c) 1982, 2007, oracle.
all
rights reserved.
sql>
connect
test
enter
password
:
connected.
|
也就是说,只要你在锁定之前,一旦成功登录之后,该计数会被清零。在有些版本中,由于bug,也会出现lcount没有正确反映登录失败次数的情况,例如lcount neither reset on correct login nor incremented after incorrect login thru jdbc (doc id 2675398.1)中记录了这样的bug。另外,oracle 12c 后新增了一个功能,它会记录用户的最后一次登录时间:spare6字段记录用户的最后一次登录时间 。
参考资料:
https://www.eygle.com/archives/2009/07/profile_failed_login_attempts.html 。
https://dbaora.com/sys-user-table-in-oracle-last-password-change-time-last-locked-last-expired-creation-time-failed-logon/ 。
lcount neither reset on correct login nor incremented after incorrect login thru jdbc (doc id 2675398.1) 。
https://bijoos.com/oraclenotes/2013/153/ 。
以上就是oracle如何查看当前账号的相关信息总结的详细内容,更多关于oracle查看当前账号信息的资料请关注我其它相关文章! 。
原文链接:https://www.cnblogs.com/kerrycode/archive/2021/06/10/14871251.html 。
最后此篇关于ORACLE查看当前账号的相关信息的文章就讲到这里了,如果你想了解更多关于ORACLE查看当前账号的相关信息的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我有一个用 Swift 编写的自定义转换,当呈现的 View 从侧面进入时,被关闭的 View 消失。 现在我想要同样的效果,但我希望呈现的 View 从顶部进入,而被取消的 View 从底部出来。
该方法的预期目的是什么 findBinding(View view) ? 我一直在使用数据绑定(bind)库测试版。 目前还没有针对各个类的官方引用文档,所以我一直在查看源代码以了解我们可以访问哪些方
我试图在遍历 &str 时查看当前位置前面的字符。 let myStr = "12345"; let mut iter = myStr.chars().peekable(); for c in ite
每当我在 Azure 中创建新的 Azure 函数应用时,我都会选择一个存储帐户供其使用。 创建应用后,如何查看/更改存储帐户? 我尝试在门户中浏览,但无法看到可以在哪里配置它。 最佳答案 创建后,您
我想查看读取 QFile 的 QTextStream 的下一个字符,以创建一个高效的标记器。 但是,我没有找到任何令人满意的解决方案。 QFile f("test.txt"); f.open(QIOD
当我旋转手机时, ListView 中选定的项目将被取消选择。这是我的适配器。我只想更改所选项目的颜色(仅是单个选择),当我旋转手机时,我想查看我选择的内容。现在,当我旋转手机时,我看不到所选项目。
我开始编写代码来检查函数的返回值,但我不确定在捕获到一些错误后如何继续。 例如,在 fgets 中: while( fgets( rta, 3, stdin ) == NULL ) {
是否可以获取或创建一个 optional 轮,它以假想的圆圈滚动而不是直接向下(垂直)滚动? 直线链接但想要弯曲 例如就像控件 here ,但车轮是弯曲的? 最佳答案 有没有可能你想要的是一个轮播?
当我尝试为其创建 View 时出现错误:“ View 的 SELECT 在 FROM 子句中包含一个子查询”,但它在普通查询中工作正常。我认为它与我的 WHERE 子句有关,但我不明白为什么或如何修复
在一个类中,我有以下代码: /// [System.Xml.Serialization.XmlElementAttribute("Errors", typeof(ErrorsType))] [Sys
我想显示来自 catch block 的错误(日志)消息。如何在单个屏幕上显示所有消息(堆栈),以便用户了解? 谢谢... 最佳答案 使用 Toast 怎么样? 示例: Toast.makeText(
我有以下屏幕(图像),当按下按钮时显示一个侧面菜单,菜单出现,另外我有一个 uitableview 来显示其他东西 我的问题是,当侧边菜单出现时,uitableview 被调整了大小。 如何保持 ui
invariant violation element type is invalid: expected a string (for built-in components) or a class/
我是新手,正在尝试学习 fork() 和系统调用的功能,现在我正在使用 execvp() 来尝试制作 bash,但我遇到的问题是,当我编写正确的命令时,程序结束,我想循环使用我的 bash,直到有人在
我正在尝试使用 Laravel request validation method 创建一个登录页面 和凭据验证 -> 如果用户未通过身份验证,它将返回错误“密码错误....” 我在两种不同的情况下看
我有一个 .jar 文件,我需要查看 jar 文件的内容。 是否有任何解码器可用于解码 jar 文件。 我也有 solaris 环境,我需要知道什么是 最佳答案 使用jar命令行,即 jar tf j
Git 提供了几种方式可以帮你快速查看提交中哪些文件被改变。 如果你每天使用 Git,应该会提交不少改动。如果你每天和其他人在一个项目中使用 Git,假设 每个人 每天的提
问题 tensor详细数值 不能直接print打印: ? 1
一,uptime 可以查看系统的运行时间 show global status like 'uptime'; 二,利用linux命令查看 Linux 下有个 uptime 可以查看系统的运行时
在所有主流的浏览器中,均能够查看原始的 XML 文件 不要指望 XML 文件会直接显示为 HTML 页面 查看 XML 文件 <?xml version="1.0" e
我是一名优秀的程序员,十分优秀!