如何使用C#创建用户oracle数据库而不是使用SQL手动输入用户名,密码?

时间:2018-01-25 10:24:43

标签: c# oracle

如何使用C#创建用户oracle数据库而不是使用SQL手动输入用户名,密码?我想在Visual Studio Form中使用C#语言创建Oracle数据库用户。

当我点击Create按钮时,它应该使用C#语言自动创建数据库用户名和密码。请帮我。 enter image description here

1 个答案:

答案 0 :(得分:0)

嗯,这不是一项简单的任务。我不会说C#所以我只会评论Oracle的故事。

新用户由另一个特权用户(即被授予CREATE USER权限的用户)创建 - 并非每个用户都能够执行此操作。例如,SYS是,但SYS是特殊的,您根本不应该使用它,而是创建另一个用户并授予它执行此类操作所需的权限(一个选项是授予它DBA角色)。

现在,作为特权用户连接,您将运行CREATE USER命令,如下所示:

create user oliur            --> this is username
  identified by oliur_pw     --> this is password
  default tablespace users
  temporary tablespace temp
  profile default
  quota  unlimited on users;

可用表空间列表是

select tablespace_name from dba_tablespaces;

一旦这样做,您应该为新创建的用户授予一些初始权限。否则,他将无法执行任何,甚至无法连接到数据库。这将是CREATE SESSION特权。其他一些特权:

grant create session       to oliur;
grant create table         to oliur;
grant create procedure     to oliur;
...

也许您可以创建一个存储过程,该存储过程驻留在特权用户的架构中。您将传递用户名(作为参数),它将创建具有该名称的用户。从密码开始,您可以将其设置为与用户名相同,常量,加密等等 - 这取决于您。

请注意,此类过程必须使用动态SQL(EXECUTE IMMEDIATE),否则您无法从过程执行DDL。

这就是它的样子:

create or replace procedure p_create_user (par_username in varchar2) is
begin
  execute immediate ('create user '     || par_username ||
                     '  identified by ' || par_username ||
                     '  default tablespace user_data '  ||
                     '  temporary tablespace temp'      ||
                     '  profile default'                ||
                     '  quota unlimited on user_data');

  execute immediate ('grant create session to ' || par_username);
end;
/ 

在Oracle中,将其称为:

begin
  p_create_user('oliur');
end;
/

PL/SQL procedure successfully completed.

好的,让我们以oliur连接:

SQL> connect oliur/oliur@kc11g
Connected.

很酷,成功!我们可以做点什么吗?

SQL> create table test (id number);
create table test (id number)
*
ERROR at line 1:
ORA-01031: insufficient privileges

没有,缺少这样做的特权。

现在,从故事的C#部分来看,你只需要弄清楚如何调用Oracle程序,但我希望这比上面的任务更简单。