`
yanchencheng
  • 浏览: 21316 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

获取用户创建和授权

阅读更多

如何获得Oracle用户创建和授权语句

作者:NinGoo | 【转载须以超链接形式标明文章原始出处和作者信息】

有时候,我们需要在不同的库中复制用户定义,比如需要在一个测试库中创建和产品库中同名的用户,并且拥有同样的权限。或者在同一个库中创建一个不同名的用户,但是和另外一个用户拥有同样的权限等。换句话说,就是需要获得某个用户的创建和授权语句。

可以通过SQL从一些数据字典中查询到授权信息,生成授权语句:

undefine user_name
set pagesize 1000
select 'grant '||tt.granted_role||' to '||tt.grantee||';' as SQL_text
from dba_role_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'grant '||tt.privilege||' to '||tt.grantee||';'
from dba_sys_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'grant '||tt.privilege||' on '||owner||'.'||table_name||' to '||tt.grantee||';'
from dba_tab_privs tt where tt.grantee=(upper('&&user_name'))
union all
select 'alter user '||tt.user_name||' quota '||maxblocks*blocksize||' on '||ts_name||';'
from KU$_TSQUOTA_VIEW tt where tt.user_name=(upper('&&user_name'));

另外,通过Oracle提供的dbms_metadata包,可以获得更加详细准确的创建用户以及授权的DDL语句,注意在9i中dbms_output.put_line中限制一行不能超过255个字符,所以如果某些授权语句超长,可能无法打印出来,折衷的办法可能,先将结果插入的临时表然后select出来,或者将一行截断循环打印,或者干脆使用前面的SQL语句直接查数字字典表就没有这个限制了:

set serveroutput on size 1000000
set verify off
undefine user_name
declare
 v_name varchar2(30) := upper('&user_name');
 no_grant exception;
 pragma exception_init( no_grant, -31608 );
begin
 dbms_metadata.set_transform_param(dbms_metadata.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
 dbms_output.enable(1000000);
 dbms_output.put_line(dbms_metadata.get_ddl('USER',v_name));
 begin
   dbms_output.put_line(dbms_metadata.get_granted_ddl('SYSTEM_GRANT',v_name));
 exception
   when no_grant then dbms_output.put_line('-- No system privs granted');
 end;
 begin
   dbms_output.put_line(dbms_metadata.get_granted_ddl('ROLE_GRANT',v_name));
 exception
   when no_grant then dbms_output.put_line('-- No role privs granted');
 end;
 begin
   dbms_output.put_line(dbms_metadata.get_granted_ddl('OBJECT_GRANT',v_name));
 exception
   when no_grant then dbms_output.put_line('-- No object privs granted');
 end;
 begin
  dbms_output.put_line(dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA',v_name));
 exception
   when no_grant then dbms_output.put_line('-- No tablespace quota specified');
 end;
 dbms_output.put_line(dbms_metadata.get_granted_ddl('DEFAULT_ROLE', v_name ));
exception
 when others then
  if SQLCODE = -31603 then dbms_output.put_line('-- User does not exists');
  else raise;
  end if;
end;
/

运行结果如下:

输入 user_name 的值:  NinGoo

   CREATE USER "NINGOO" IDENTIFIED BY VALUES
'S:76033D49338E38166B0C090A4447B3D58A70B16C2001A39D7AA844B25616;DABAE35759'
      DEFAULT TABLESPACE "USERS"
      TEMPORARY TABLESPACE "TEMP";
  GRANT UNLIMITED TABLESPACE TO "NINGOO";
   GRANT "CONNECT" TO "NINGOO";
   GRANT "RESOURCE" TO "NINGOO";
   GRANT "DBA" TO "NINGOO";
  GRANT "PLUSTRACE" TO "NINGOO";
  GRANT SELECT ON "SYS"."V_$PROCESS" TO "NINGOO";
  GRANT SELECT ON "SYS"."V_$SESSION" TO "NINGOO";

  DECLARE
  TEMP_COUNT NUMBER;
  SQLSTR VARCHAR2(200);
BEGIN
  SQLSTR :=
'ALTER USER "NINGOO" QUOTA 1048576000 ON "USERS"';
  EXECUTE IMMEDIATE
SQLSTR;
EXCEPTION
  WHEN OTHERS THEN
    IF SQLCODE = -30041 THEN
      SQLSTR
:= 'SELECT COUNT(*) FROM USER_TABLESPACES
              WHERE TABLESPACE_NAME =
''USERS'' AND CONTENTS = ''TEMPORARY''';
      EXECUTE IMMEDIATE SQLSTR INTO
TEMP_COUNT;
      IF TEMP_COUNT = 1 THEN RETURN;
      ELSE RAISE;
      END
IF;
    ELSE
      RAISE;
    END IF;
END;
/

   ALTER USER "NINGOO" DEFAULT ROLE ALL;

PL/SQL 过程已成功完成。

本文网址:http://www.ningoo.net/html/2008/how_to_get_oracle_user_privileges.html

 

 

DBA Scripts:获取用户创建语句

作者:eygle | <script src="http://www.eygle.com/English.js" type="text/javascript"></script> English Version 【转载时请以超链接形式标明文章和作者信息及本声明
链接:


今天新开一个分类:Scripts,用来收集和记录一些DBA经常使用的脚本。
这些脚本有的来自网络,有的来自自己编写,记录在这里供大家参考,同时也给自己一个重新熟悉的过程。

很多时候我们在作数据库迁移时需要进行重建用户等工作,这时就需要获得用户信息,本脚本就用于获取用户的创建语句,具体脚本如下,来源Metalink:

SET verify off;
SET termout off;
SET feedback off;
SET echo off;
SET pagesize 0;
SET timeing off;

SET termout on
SELECT 'Creating user build script...' FROM DUAL;
SET termout off;

CREATE TABLE usr_temp( lineno NUMBER,usr_name VARCHAR2(30),text VARCHAR2(80))
/

DECLARE
CURSOR usr_cursor
IS
SELECT username, PASSWORD, default_tablespace, temporary_tablespace,
PROFILE
FROM SYS.dba_users
WHERE username != 'SYS' AND username != 'SYSTEM'
ORDER BY username;

CURSOR qta_cursor (c_usr VARCHAR2)
IS
SELECT tablespace_name, max_bytes
FROM SYS.dba_ts_quotas
WHERE username = c_usr;

lv_username SYS.dba_users.username%TYPE;
lv_password SYS.dba_users.PASSWORD%TYPE;
lv_default_tablespace SYS.dba_users.default_tablespace%TYPE;
lv_temporary_tablespace SYS.dba_users.default_tablespace%TYPE;
lv_profile SYS.dba_users.PROFILE%TYPE;
lv_tablespace_name SYS.dba_ts_quotas.tablespace_name%TYPE;
lv_max_bytes SYS.dba_ts_quotas.max_bytes%TYPE;
lv_string VARCHAR2 (80);
lv_lineno NUMBER := 0;

PROCEDURE write_out (p_line INTEGER, p_name VARCHAR2, p_string VARCHAR2)
IS
BEGIN
INSERT INTO usr_temp
(lineno, usr_name, text
)
VALUES (p_line, p_name, p_string
);
END;
BEGIN
OPEN usr_cursor;

LOOP
FETCH usr_cursor
INTO lv_username, lv_password, lv_default_tablespace,
lv_temporary_tablespace, lv_profile;

EXIT WHEN usr_cursor%NOTFOUND;
lv_lineno := 1;
lv_string := ('CREATE USER ' || LOWER (lv_username));
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;

IF lv_password IS NULL
THEN
lv_string := 'IDENTIFIED EXTERNALLY';
ELSE
lv_string := ('IDENTIFIED BY VALUES ''' || lv_password || '''');
END IF;

write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := 'DEFAULT TABLESPACE ' || lv_default_tablespace;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := 'TEMPORARY TABLESPACE ' || lv_temporary_tablespace;
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;

OPEN qta_cursor (lv_username);

LOOP
FETCH qta_cursor
INTO lv_tablespace_name, lv_max_bytes;

EXIT WHEN qta_cursor%NOTFOUND;
lv_lineno := lv_lineno + 1;

IF lv_max_bytes IS NULL
THEN
lv_string := 'QUOTA UNLIMITED ON ' || lv_tablespace_name;
ELSE
lv_string :=
'QUOTA ' || lv_max_bytes || ' ON ' || lv_tablespace_name;
END IF;

write_out (lv_lineno, lv_username, lv_string);
END LOOP;

CLOSE qta_cursor;

lv_string := ('PROFILE ' || lv_profile || ';');
write_out (lv_lineno, lv_username, lv_string);
lv_lineno := lv_lineno + 1;
lv_string := ' ';
write_out (lv_lineno, lv_username, lv_string);
END LOOP;

CLOSE usr_cursor;
END;
/

SPOOL create_users.sql
SET heading off
SET recsep off
COL test format a80 word_wrap


SELECT text
FROM usr_temp
ORDER BY usr_name, lineno;

SPOOL off;

DROP TABLE usr_temp;
EXIT

运行该脚本后会产生一个create_users.sql的输出文件,输出内容参考范例如下:

CREATE USER dbsnmp
IDENTIFIED BY VALUES 'E066D214D5421CCC'
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;

CREATE USER eygle
IDENTIFIED BY VALUES 'B726E09FE21F8E83'
DEFAULT TABLESPACE EYGLE
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;

CREATE USER outln
IDENTIFIED BY VALUES '4A3BA55E08595C81'
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;

CREATE USER perfstat
IDENTIFIED BY VALUES 'AC98877DE1297365'
DEFAULT TABLESPACE PERFSTAT
TEMPORARY TABLESPACE TEMP
QUOTA -1 ON PERFSTAT
PROFILE DEFAULT;

CREATE USER test
IDENTIFIED BY VALUES '7A0F2B316C212D67'
DEFAULT TABLESPACE TEST
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;

CREATE USER wmsys
IDENTIFIED BY VALUES '7C9BA362F8314299'
DEFAULT TABLESPACE SYSTEM
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;

 

 


历史上的今天...
      >> 2008-07-15文章:
             SPFILE参数修改错误的解决办法
      >> 2007-07-15文章:
             摄影习作-花之灵
------
这篇 【DBA Scripts:获取用户创建语句】来自 www.eygle.com | CSDN技术网摘| del.icio.us|365Key

By eygle on 2006-07-15 13:09 | Comments (0) | Posted to Scripts | Edit |Pageviews: <script src="http://www.eygle.com/cntall.php" language="Javascript" type="text/javascript"></script> 981

分享到:
评论

相关推荐

    微信网页授权获取用户openid以及用户信息demo下载

    - 授权类型:微信提供了snsapi_base和snsapi_userinfo两种授权方式,前者只获取openid,后者还能获取用户基本信息,需要用户同意授权。 - 接口调用频率限制:微信对API调用有频率限制,过快的请求可能会被封禁,需要...

    asp版实现微信登录授权并获取用户昵称、性别、头像、来自等信息

    在ASP(Active Server Pages)开发环境中,实现微信登录授权并获取用户的基本信息,如昵称、性别、头像和来源地,是常见的功能需求。微信提供了开放平台接口,允许开发者集成微信登录,以提升用户体验和增强用户数据...

    js微信网页授权登录获取详细信息

    拿到access_token和openid后,可以通过微信的接口获取用户的基本信息,如昵称、头像、性别等。对于企业微信,还可以获取到用户的企业信息,如部门、职位等。 3. **企业微信授权登录** 企业微信授权登录与微信网页...

    Android授权第三方登录获取新浪微博用户信息

    - **创建授权请求**:构建授权URL并启动浏览器或者内嵌WebView,引导用户完成授权流程。 - **监听授权回调**:在重定向URI对应的Activity中捕获回调,处理授权码并请求Access Token。 - **请求用户信息**:使用...

    按项目微信授权获取名称和头像

    "按项目微信授权获取名称和头像"这个主题涉及到的是利用微信开放平台的能力,为不同的项目获取用户的微信昵称和头像信息。以下是关于这个过程的详细说明: 1. **微信授权流程**: - **步骤一:HTML静态页面获取...

    微信小程序弹出对话框,可设置获取用户信息type

    在描述中提到的`type`属性,实际上是指在授权获取用户信息时使用的`scope`。微信小程序提供了一套完整的用户授权机制,通过`wx.authorize`或`wx.openSetting`接口可以请求用户授权获取特定的信息,例如基本信息、...

    java获取微信用户信息

    - 有了access_token和openid,你可以通过微信API获取用户的基本信息,如昵称、头像等。 2. **OAuth2.0实现细节**: - **授权请求**:构建请求链接,包含你的AppID、redirect_uri(回调URL)、scope(请求权限范围...

    java处理小程序授权和app微信授权

    在Java开发中,微信授权和小程序授权是移动应用与微信平台交互的重要环节,主要用于实现用户身份验证和数据安全。本文将详细讲解如何使用Java处理小程序和App的微信授权,以及解析小程序传递的`encryptedData`参数,...

    C#获取的企业微信的用户身份

    安装完成后,我们就可以开始编写代码来获取用户身份了。 企业微信的用户身份主要通过"OAuth2.0授权登录"实现。首先,我们需要在前端页面设置跳转到微信授权页面的链接,这个链接会包含我们的AppID、重定向URI以及...

    微信获取用户信息demo

    开发者可以模拟不同情况下的用户授权和信息获取,确保代码健壮性。 8. **集成与部署** 将这个demo集成到实际项目中,可能需要配置服务器环境,处理跨域问题,并且根据业务需求调整逻辑。部署后,用户授权后即可在...

    小程序登录获取用户信息 php服务端

    综上所述,PHP服务端处理小程序登录获取用户信息主要包括:接收`code`、交换`openid`和`session_key`、解密用户信息、创建和验证`session_id`以及数据存储和更新。这个过程涉及到了小程序的API调用、网络请求、数据...

    钉钉免登陆,并获取用户信息

    【钉钉免登陆并获取用户信息】是一种技术实践,它允许开发者在不需用户手动登录的情况下,通过特定的...解压后,开发者可以通过阅读和分析这些内容,进一步理解如何在自己的项目中实现钉钉免登陆和获取用户信息的功能。

    java获取微信用户信息源码

    在微信API中,OAuth2.0主要用于获取用户的微信基本信息,如昵称、头像等。使用OAuth2.0,开发者无需获取用户的微信账号密码,而是通过授权流程引导用户同意,从而获取一个Access Token,这个Token可以用来请求微信...

    SpringBoot+uniapp实现网页授权获取用户基本信息

    前端uni-app应用中创建授权页面,处理微信重定向携带的code。 后端提供接口,接收前端传递的code,调用微信API获取access_token和用户信息。 6.异常处理: redirect_uri参数错误处理。 oauth_code已使用错误处理...

    uniapp获取用户通讯录外加后台系统

    【标题】"uniapp获取用户通讯录外加后台系统"涉及的主要知识点是使用uni-app框架来开发移动应用,并实现获取用户手机通讯录的功能,同时配合后台系统进行数据处理和管理。 【uni-app】是一个多端开发框架,允许...

    ASP微信获取用户信息接口

    - 根据授权信息获取用户的详细信息。 ### 代码解析 #### 类声明 ```vb Class EasyAsp_Weixin ``` - **变量声明**: - `s_AppID`: 应用ID。 - `s_AppSecret`: 应用密钥。 - `s_Token`: 验证令牌。 - `s_...

    微信授权登录.rar

    本文将详细解析“微信授权登录.rar”中的知识点,包括C#开放平台信息配置、代码调整、openid的使用以及微信小程序获取用户手机号码的接口。 首先,C#是一种广泛应用于Web开发的语言,常常与ASP.NET MVC框架结合,...

    微信小程序实现朋友圈页面。UGC发布,包含获取用户授权信息。

    在这个项目中,我们将讨论如何使用微信小程序来实现一个类似朋友圈的功能,包括用户生成内容(UGC)的发布以及获取用户授权信息。 首先,我们需要了解微信小程序的基本架构。微信小程序由多个页面组成,每个页面由...

    shiro获取登录状态和用户信息

    ### Shiro 获取登录状态与用户信息 在Java Web开发领域,Apache Shiro 是一个非常流行的权限管理框架。...以上就是关于如何在Shiro框架中获取用户登录状态和用户信息的相关知识点。希望对你有所帮助!

    spring oauth2获取当前登录用户信息.docx

    现在,当你再次调用`SecurityContextHolder.getContext().getAuthentication().getPrincipal()`时,你应该能够获取到包含用户ID和其他必要信息的完整用户对象,而不仅仅是用户名。这使得在实际开发中处理用户信息变...

Global site tag (gtag.js) - Google Analytics