连接到使用我创建的用户创建的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:关于角色与存储过程的问题,您有一个很好的观点。谢谢你指出这一点