连接到使用我创建的用户创建的SQL数据库时出错
我使用我创建的用户连接到数据库时遇到一些问题。首先,我创建了如下用户:连接到使用我创建的用户创建的SQL数据库时出错,sql,oracle,Sql,Oracle,我使用我创建的用户连接到数据库时遇到一些问题。首先,我创建了如下用户: create user util1 identified by user1; create user util2 identified by user2; create user util3 identified by user3; create user util4 identified by user4; create user util5 identified by user5; create user ut
create user util1 identified by user1;
create user util2 identified by user2;
create user util3 identified by user3;
create user util4 identified by user4;
create user util5 identified by user5;
create user util6 identified by user6;
create user util7 identified by user7;
create user util8 identified by user8;
grant dba to util1,util2,util3,util4,util5,util6,util7,util8;
select lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from (select null grantee, username granted_role from dba_users where username like upper('%UTIL%')
union
select grantee, granted_role from dba_role_privs
union
select grantee, privilege from dba_sys_privs)
start with grantee is null
connect by grantee = prior granted_role;
这很好。但当我尝试使用“util1”的权限创建表时,它不起作用:
connect util1/user1 AS SYSDBA;
create table pr1(
cod_subansamblu number(4),
denumire varchar2(20) not null,
cantitate number(7,3),
UM varchar2(3),
pret_unitar number(9,2),
cod_ansamblu number(4),
cod_sectie number(4) not null,
constraint pr1_cod_subansamblu_pk primary key(cod_subansamblu),
constraint pr1_UM_chk check(UM in ('BUC','ML','MP','MC','SET'))
);
我真的不知道出了什么问题。非常感谢您的帮助
我收到的错误消息是:
Last Execution Details
Results
Statistics Plan
ORA-00900: invalid SQL statement
CREATE TABLE语句没有任何错误:
SQL> create table pr1(
cod_subansamblu number(4),
denumire varchar2(20) not null,
cantitate number(7,3),
UM varchar2(3),
pret_unitar number(9,2),
cod_ansamblu number(4),
cod_sectie number(4) not null,
constraint pr1_cod_subansamblu_pk primary key(cod_subansamblu),
constraint pr1_UM_chk check(UM in ('BUC','ML','MP','MC','SET'))
); 2 3 4 5 6 7 8 9 10 11
Table created.
SQL>
所以很难理解为什么在运行它时抛出ORA-00900。您使用什么客户端来运行它?SQL*Plus?像蟾蜍这样的动物?你能提供一个完整会议的剪贴,这样我们就可以确切地看到发生了什么
要记住的另一件事是,如果您以sysdba身份使用
进行连接,则无论您是否在连接字符串中指定用户,您都将以SYS身份登录数据库:
SQL> conn apc/password as sysdba
Connected.
SQL> sho user
USER is "SYS"
SQL>
(这仅在您以oracle
帐户或其他适当特权用户身份登录操作系统时有效)
因此,您可能认为您正在以UTIL1的形式运行CREATETABLE语句,但实际上您将以SYS的形式运行它,这不是一个好主意。事实上,这是一种不好的做法。为什么要将“连接为sysdba
”。只能用于维护工作。同时,将DBA授予“常规”用户也不是一个好主意。只要授予那些用户connect
和resource
,如果这是一个开发数据库。如果是生产数据库,您应该分别授予这些用户connect
和每个CREATE
权限。@没有名称的\u horse\u-Oracle正在11g中弃用资源(以及connect和DBA)。“Oracle建议您为数据库安全设计自己的角色,而不是依赖此角色。Oracle数据库的未来版本可能不会自动创建此角色”@APC:是的,我知道。这就是为什么我说生产数据库不应该使用这个角色。但是对于开发数据库来说,这是非常方便的。@horse\u没有名字-我不同意:编写一个授予所需特权的脚本几乎不需要时间。我的意思是,在几乎所有情况下,资源并没有授予开发人员所需的一切(表空间配额、额外的系统特权、对其他模式对象的权限)。所以我们需要写一个定制的脚本。Plus RESOURCE是一个角色,如果开发人员必须编写使用这些权限的存储过程,则会产生问题。@APC:关于角色与存储过程的问题,您有一个很好的观点。谢谢你指出这一点