我目前正在尝试向Oracle数据库用户授予几个简单的特权。
我尝试了以下查询:
{Regression results
Method Intercept Slope Angle (degrees) P-perm (1-tailed)
1 OLS 14.9923058 1.965779 63.03736 0.01
2 MA -20.2206577 4.621907 77.79161 0.01
3 SMA -0.1518283 3.108107 72.16498 NA}
第二个特权是我实际需要的特权,但是我决定简单地尝试给用户所有特权,以查看是否可行。当我使用
检查用户的权限时grant all privileges to <username>
grant alter session to <username>
一切似乎都说不。
我什至尝试授予用户dba特权,但仍然失败。我的最终目标是运行需要打开这些权限的脚本。
非常感谢您的帮助。
答案 0 :(得分:1)
一切似乎都拒绝了
您正在寻找错误的内容。如果user_sys_privs
视图列出了ALTER SESSION
:
select * from user_sys_privs where privilege = 'ALTER SESSION';
USERNAME PRIVILEGE ADM COM
-------------------- ------------- --- ---
MY_USER ALTER SESSION NO NO
然后用户具有特权。
NO
条目并不意味着未授予特权。显示您的列是
desc user_sys_privs
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
USERNAME VARCHAR2(128)
PRIVILEGE VARCHAR2(40)
ADMIN_OPTION VARCHAR2(3)
COMMON VARCHAR2(3)
和they are described in the documentation:
ADMIN_OPTION
-指示授予是否带有ADMIN
选项(YES
)(NO
)
COMMON
-指示授予方式。可能的值:
YES
(如果特权通常被授予(使用了CONTAINER=ALL
)
NO
(如果特权是在本地授予的(未使用CONTAINER=ALL
)
由于您没有指定admin选项或任何其他修饰符,所以将这两个标志都设置为NO
是正确的。
您可能会感到困惑的是,当您查询用户时,所有权限都会列出,因为 是您grant all privileges to <username>
所做的。您可能想撤销所有这些特权,而只授予用户实际需要的特定特权。当您查询user_sys_privs
时,您会看到一个简短得多的列表-可能只有该单个条目,具体取决于您需要为用户保留的其他内容。
您可能还想考虑使用角色,尽管有时有时需要直接授予特权-如果存储过程依赖于角色。