有时候,我们需要在不同的库中复制用户定义,比如需要在一个测试库中创建和产品库中同名的用户,并且拥有同样的权限。或者在同一个库中创建一个不同名的用户,但是和另外一个用户拥有同样的权限等。换句话说,就是需要获得某个用户的创建和授权语句。
可以通过SQL从一些数据字典中查询到授权信息,生成授权语句:
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 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;
/
运行结果如下:
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 过程已成功完成。
相关推荐
- 授权类型:微信提供了snsapi_base和snsapi_userinfo两种授权方式,前者只获取openid,后者还能获取用户基本信息,需要用户同意授权。 - 接口调用频率限制:微信对API调用有频率限制,过快的请求可能会被封禁,需要...
在ASP(Active Server Pages)开发环境中,实现微信登录授权并获取用户的基本信息,如昵称、性别、头像和来源地,是常见的功能需求。微信提供了开放平台接口,允许开发者集成微信登录,以提升用户体验和增强用户数据...
拿到access_token和openid后,可以通过微信的接口获取用户的基本信息,如昵称、头像、性别等。对于企业微信,还可以获取到用户的企业信息,如部门、职位等。 3. **企业微信授权登录** 企业微信授权登录与微信网页...
- **创建授权请求**:构建授权URL并启动浏览器或者内嵌WebView,引导用户完成授权流程。 - **监听授权回调**:在重定向URI对应的Activity中捕获回调,处理授权码并请求Access Token。 - **请求用户信息**:使用...
"按项目微信授权获取名称和头像"这个主题涉及到的是利用微信开放平台的能力,为不同的项目获取用户的微信昵称和头像信息。以下是关于这个过程的详细说明: 1. **微信授权流程**: - **步骤一:HTML静态页面获取...
在描述中提到的`type`属性,实际上是指在授权获取用户信息时使用的`scope`。微信小程序提供了一套完整的用户授权机制,通过`wx.authorize`或`wx.openSetting`接口可以请求用户授权获取特定的信息,例如基本信息、...
- 有了access_token和openid,你可以通过微信API获取用户的基本信息,如昵称、头像等。 2. **OAuth2.0实现细节**: - **授权请求**:构建请求链接,包含你的AppID、redirect_uri(回调URL)、scope(请求权限范围...
在Java开发中,微信授权和小程序授权是移动应用与微信平台交互的重要环节,主要用于实现用户身份验证和数据安全。本文将详细讲解如何使用Java处理小程序和App的微信授权,以及解析小程序传递的`encryptedData`参数,...
安装完成后,我们就可以开始编写代码来获取用户身份了。 企业微信的用户身份主要通过"OAuth2.0授权登录"实现。首先,我们需要在前端页面设置跳转到微信授权页面的链接,这个链接会包含我们的AppID、重定向URI以及...
开发者可以模拟不同情况下的用户授权和信息获取,确保代码健壮性。 8. **集成与部署** 将这个demo集成到实际项目中,可能需要配置服务器环境,处理跨域问题,并且根据业务需求调整逻辑。部署后,用户授权后即可在...
综上所述,PHP服务端处理小程序登录获取用户信息主要包括:接收`code`、交换`openid`和`session_key`、解密用户信息、创建和验证`session_id`以及数据存储和更新。这个过程涉及到了小程序的API调用、网络请求、数据...
【钉钉免登陆并获取用户信息】是一种技术实践,它允许开发者在不需用户手动登录的情况下,通过特定的...解压后,开发者可以通过阅读和分析这些内容,进一步理解如何在自己的项目中实现钉钉免登陆和获取用户信息的功能。
在微信API中,OAuth2.0主要用于获取用户的微信基本信息,如昵称、头像等。使用OAuth2.0,开发者无需获取用户的微信账号密码,而是通过授权流程引导用户同意,从而获取一个Access Token,这个Token可以用来请求微信...
前端uni-app应用中创建授权页面,处理微信重定向携带的code。 后端提供接口,接收前端传递的code,调用微信API获取access_token和用户信息。 6.异常处理: redirect_uri参数错误处理。 oauth_code已使用错误处理...
【标题】"uniapp获取用户通讯录外加后台系统"涉及的主要知识点是使用uni-app框架来开发移动应用,并实现获取用户手机通讯录的功能,同时配合后台系统进行数据处理和管理。 【uni-app】是一个多端开发框架,允许...
- 根据授权信息获取用户的详细信息。 ### 代码解析 #### 类声明 ```vb Class EasyAsp_Weixin ``` - **变量声明**: - `s_AppID`: 应用ID。 - `s_AppSecret`: 应用密钥。 - `s_Token`: 验证令牌。 - `s_...
本文将详细解析“微信授权登录.rar”中的知识点,包括C#开放平台信息配置、代码调整、openid的使用以及微信小程序获取用户手机号码的接口。 首先,C#是一种广泛应用于Web开发的语言,常常与ASP.NET MVC框架结合,...
在这个项目中,我们将讨论如何使用微信小程序来实现一个类似朋友圈的功能,包括用户生成内容(UGC)的发布以及获取用户授权信息。 首先,我们需要了解微信小程序的基本架构。微信小程序由多个页面组成,每个页面由...
### Shiro 获取登录状态与用户信息 在Java Web开发领域,Apache Shiro 是一个非常流行的权限管理框架。...以上就是关于如何在Shiro框架中获取用户登录状态和用户信息的相关知识点。希望对你有所帮助!
现在,当你再次调用`SecurityContextHolder.getContext().getAuthentication().getPrincipal()`时,你应该能够获取到包含用户ID和其他必要信息的完整用户对象,而不仅仅是用户名。这使得在实际开发中处理用户信息变...