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

And*_*dy5 81 oracle access-control oracle11g

有人可以告诉我如何建立在Oracle 11g中用户,只授予该用户只能执行一个特定的存储过程,并在该过程中的表的能力.

我真的不确定怎么做!

cag*_*boy 85

以SYSTEM身份连接.

CREATE USER username IDENTIFIED BY apassword;

GRANT CONNECT TO username;

GRANT EXECUTE on schema.procedure TO username;
Run Code Online (Sandbox Code Playgroud)

您可能还需要:

GRANT SELECT [, INSERT] [, UPDATE] [, DELETE] on schema.table TO username;
Run Code Online (Sandbox Code Playgroud)

到程序使用的任何表.

  • +1但是,根据Oracle版本,"CONNECT"角色具有比名称更多的权限.我宁愿给予'CREATE SESSION`. (6认同)
  • 您不必在任何表上授予选择,插入,更新或删除权限.使用过程的一个要点是,您可以保持表"无人值守",并在过程级别控制对它们的访问. (3认同)
  • "对schema.procedure TO用户名进行GRANT EXECUTE;" 返回错误说"第1行的错误:ORA-04042:过程,函数,包或包体不存在" (3认同)
  • ["CONNECT,RESOURCE和DBA提供这些角色是为了与先前版本兼容... Oracle建议您为数据库安全设计自己的角色,而不是依赖这些角色.这些角色可能不会由Oracle的未来版本自动创建数据库."(http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9013.htm) (2认同)

小智 26

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

CONNECT <USER-NAME>/<PASSWORD>@<DATABASE NAME>;
Run Code Online (Sandbox Code Playgroud)

- 创建用户查询

CREATE USER <USER NAME> IDENTIFIED BY <PASSWORD>;
Run Code Online (Sandbox Code Playgroud)

- 提供角色

GRANT CONNECT,RESOURCE,DBA TO <USER NAME>;
Run Code Online (Sandbox Code Playgroud)

- 提供特权

GRANT CREATE SESSION GRANT ANY PRIVILEGE TO <USER NAME>;
GRANT UNLIMITED TABLESPACE TO <USER NAME>;
Run Code Online (Sandbox Code Playgroud)

- 提供对表格的访问.

GRANT SELECT,UPDATE,INSERT ON <TABLE NAME> TO <USER NAME>;
Run Code Online (Sandbox Code Playgroud)

  • 会话结束后应该有一个逗号 (4认同)
  • ORA-00990:'GRANT CREATION SESSION授予对<USER NAME>的任何特权的遗失或无效特权;' (2认同)
  • ' - 提供权限'行需要在此处添加逗号:GRANT创建会话,授予<USER NAME>的任何特权; 我编辑了这个,但由于某种原因被拒绝了. (2认同)

APC*_*APC 21

Oracle文档全面,在线且免费.你应该学会使用它.你可以在这里找到CREATE USERGRANT的语法,

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

要允许存储过程的新用户权限,我们需要授予EXECUTE特权.设保人必须是以下之一:

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

请注意,我们通常不需要为存储过程使用的对象授予权限以便使用该过程.默认权限是我们执行具有与过程所有者相同权限的过程,并且在执行过程时继承它们的权限.这由AUTHID子句涵盖.默认值是definer(即过程所有者).只有当AUTHID设置为CURRENT_USER(调用者,即我们的新用户)时,我们才需要授予该过程使用的对象的权限. 了解更多.


erh*_*hun 10

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

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

 CONNECT SYSTEM/<<System_User_Password>>@<<DatabaseName>>; -- connect db with username and password, ignore if you already connected to database.
Run Code Online (Sandbox Code Playgroud)

然后运行以下脚本

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
Run Code Online (Sandbox Code Playgroud)

编辑:如果你遇到oracle ora-28001的问题,密码已经过期,这也很有用

select * from dba_profiles;-- check PASSWORD_LIFE_TIME 
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -- SET IT TO UNLIMITED
Run Code Online (Sandbox Code Playgroud)

  • `CONNECT,RESOURCE,DBA` [*"提供这些角色是为了与以前版本的Oracle数据库兼容... Oracle建议您为数据库安全设计自己的角色,而不是依赖这些角色.这些角色可能不会自动创建未来版本的Oracle数据库."*](http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9013.htm#r209c1-t47) (2认同)