如何在Oracle 11g中创建用户并授予权限


80

有人可以建议我如何在Oracle 11g中创建用户,并仅授予该用户仅执行一个特定存储过程和该过程中的表的权限。

我不太确定该怎么做!

Answers:


86

以系统身份连接。

CREATE USER username IDENTIFIED BY apassword;

GRANT CONNECT TO username;

GRANT EXECUTE on schema.procedure TO username;

您可能还需要:

GRANT SELECT [, INSERT] [, UPDATE] [, DELETE] on schema.table TO username;

该程序使用哪个表。


6
+1但是,根据Oracle版本的不同,该CONNECT角色所具有的特权比名称所暗示的要多得多。我宁愿授予CREATE SESSION
贾斯汀·凯夫

我使用的版本是11g
Andy5


3
您不必在任何表上授予选择,插入,更新或删除的权限。使用过程的要点之一是使您可以保持表“未授权”,并在过程级别控制对它们的访问。
2013年

3
“在schema.procedure TO用户名上执行GRANT EXECUTE;” 返回错误,指出“第1行错误:ORA-04042:过程,函数,程序包或程序包主体不存在”
Tasdik Rahman

25

请按照以下步骤在Oracle中创建用户。
-以系统用户身份连接

CONNECT <USER-NAME>/<PASSWORD>@<DATABASE NAME>;

-创建用户查询

CREATE USER <USER NAME> IDENTIFIED BY <PASSWORD>;

-提供角色

GRANT CONNECT,RESOURCE,DBA TO <USER NAME>;

-提供特权

GRANT CREATE SESSION, GRANT ANY PRIVILEGE TO <USER NAME>;
GRANT UNLIMITED TABLESPACE TO <USER NAME>;

-提供对表的访问。

GRANT SELECT,UPDATE,INSERT ON <TABLE NAME> TO <USER NAME>;

在Oracle 11g中,是“ grant dba”还是“ grand sysdba”?
jondinham 2014年

2
ORA-00990:在“ GRANT CREATE SESSION GRANT PRIVILEGE TO <USER NAME>”上缺少或无效的特权;
Nicolas Mommaerts 2014年

4
会议结束后应该有一个逗号
Karthik Prasad 2014年

2
“-提供特权”行需要在此处添加逗号:GRANT CREATE SESSION,将任何特权授予<USER NAME>;我对此进行了编辑,但由于某种原因被拒绝。
ghost_1989


21

Oracle文档是全面,在线和免费的。您应该学习使用它。您可以在此处找到CREATE USER和在此处GRANT的语法,

为了连接到数据库,我们需要向用户授予CREATE SESSION特权

为了在存储过程上允许新的用户权限,我们需要授予EXECUTE特权。授权人必须是以下之一:

  • 程序所有者
  • 用户被授予使用WITH ADMIN选项执行该过程的权限
  • 具有GRANT ANY OBJECT特权的用户
  • DBA或其他超级用户帐户。

请注意,我们通常不需要授予存储过程使用的对象权限才能使用该过程。默认权限是我们以与过程所有者相同的权限执行该过程,并照原样在执行该过程时继承其权限。这由AUTHID子句覆盖。默认值为定义者(即过程所有者)。仅当AUTHID设置为CURRENT_USER(调用者,即我们的新用户)时,才需要授予该过程使用的对象的权限。 了解更多


10

不要在TEST和PROD等关键环境中使用这些方法。仅针对本地环境建议以下步骤。对于我的本地主机,我通过以下步骤创建用户:

重要提示:使用SYSTEM用户凭据创建用户,否则在同一数据库上运行多个应用程序时可能会遇到问题。

 CONNECT SYSTEM/<<System_User_Password>>@<<DatabaseName>>; -- connect db with username and password, ignore if you already connected to database.

然后在脚本下面运行

CREATE USER <<username>> IDENTIFIED BY <<password>>; -- create user with password
GRANT CONNECT,RESOURCE,DBA TO <<username>>; -- grant DBA,Connect and Resource permission to this user(not sure this is necessary if you give admin option)
GRANT CREATE SESSION TO <<username>> WITH ADMIN OPTION; --Give admin option to user
GRANT UNLIMITED TABLESPACE TO <<username>>; -- give unlimited tablespace grant

编辑:如果您遇到有关oracle ora-28001的问题,密码也已过期,这可能会很有用

select * from dba_profiles;-- check PASSWORD_LIFE_TIME 
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED


4

如前面在注释中多次提到的CONNECT,Oracle不鼓励使用RESOURCEDBA角色。

您必须以SYS身份连接才能创建您的角色以及为此角色指定的用户。您可以根据需要使用SQL Developer或SQL * Plus。不要忘记在登录字符串中提及SYSDBA角色。在connect_identifier使用不同的语法。

sqlplus sys/<<password>>@<<connect_identifier>> as sysdba

假设您有一个12cR1,类似于在“ Oracle技术网络开发人员日”作为VM提供的12cR1 。连接字符串可能是(用于连接到提供的PDB):

sqlplus sys/oracle@127.0.0.1/orcl as sysdba
sqlplus sys@"127.0.0.1/orcl" as sysdba -- to avoid putting the pw in clear

请注意,在Unix下,必须对引号进行转义,否则引号将被外壳使用。因此"成为\"

然后,您创建角色MYROLE并向其授予其他角色或特权。我几乎添加了最低限度来做一些有趣的事情:

create role myrole not identified;
grant create session to myrole;
grant alter session to myrole;
grant create table to myrole;

接下来,创建用户MYUSERidentified by密码后面的字符串区分大小写。其余的不是。您也可以使用SQL分隔标识符(用引号引起来"),而不是将常规标识符转换为大写并受到一些限制的常规标识符。配额可以unlimited代替20m

create user myuser identified by myuser default tablespace users profile default account unlock;
alter user myuser quota 20m on users;
grant myrole to myuser;

最终,您以新用户身份进行连接。

请注意,您还可以更改默认配置文件或提供另一个配置文件,以自定义某些设置,例如密码的有效期限,允许的失败登录尝试次数等。



0
CREATE USER books_admin IDENTIFIED BY MyPassword;
GRANT CONNECT TO books_admin;
GRANT CONNECT, RESOURCE, DBA TO books_admin;
GRANT CREATE SESSION GRANT ANY PRIVILEGE TO books_admin;
GRANT UNLIMITED TABLESPACE TO books_admin;
GRANT SELECT, INSERT, UPDATE, DELETE ON schema.books TO books_admin;

https://docs.oracle.com/cd/B19306_01/network.102/b14266/admusers.htm#i1006107 https://chartio.com/resources/tutorials/how-to-create-a-user-and-grant -oracle中的权限/


-1这是Google上最好的结果之一,但这是最糟糕的建议。此示例使用户成为具有完全特权的dba。这是“如何放弃对数据库的控制”
Devon_C_Miller

0

第一步:

Connect to a database using System/Password;

第二步:

创建由密码标识的用户名;(句法)

Ex: create user manidb idntified by mypass;

第三步:

授予连接,资源到用户名;(句法)

Ex: grant connect,resource to manidb;


-2
  • 步骤1 。

    create user raju identified by deshmukh;

  • 第2步。

    grant connect , resource to raju;

  • 第三步

    grant unlimitted tablespace to raju;

  • 第四步。

    grant select , update , insert , alter to raju;


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.