Introdução 

 SQL Scripts 

 Packages 

 Packages Body 
 pkg_nkw_exc 
 pkg_nkw_rpl 
 pkg_nkw_std 
 pkg_nkw_app 
 pkg_nkw_spm 
 pkg_nkw_hfs 
 pkg_nkw_sdv 
 pkg_nkw_sys 
 pkg_nkw_obj 
 pkg_nkw_grv 
 pkg_nkw_usr 
 pkg_nkw_cmm 
 pkg_nkw_hlp 
 pkg_nkw_dvp 
 pkg_nkw_dnt_std 
 pkg_nkw_dnt_dvies 
 pkg_nkw_dnt_ccvies 
 pkg_nkw_dnt_logies 
 pkg_nkw_dnt_eppc 
 pkg_nkw_dnt_eapb 
 pkg_nkw_dnt_drmies 
 pkg_nkw_dnt 
 pkg_nkw_drm 
 pkg_nkw_oim 
 pkg_nkw_aud 
 pkg_nkw_dpl 
 pkg_nkw_srw 

 Forms 6i 

 Reports 6i 

Linux

 Downloads 
PKG_NKW_GRV.SPB
Source Package Body
Concessão, revogação de privilégios em objetos.
create or replace package body pkg_nkw_grv
timestamp '2006-07-07:10:10:10'
is
   ------------------------------------------------------------------
   -- 2006 DataPRO Developers - m@urelio
   ------------------------------------------------------------------
   -- Version: 2.0.2
   ------------------------------------------------------------------
   -- Collections, Records, Variables, Constants, Exceptions, Cursors
   ------------------------------------------------------------------
   ------------------------------------------------------------------
   ----------------------- Private Section --------------------------
   ------------------------------------------------------------------
   ------------------------------------------------------------------
   -- GRANT_REVOKE
   ------------------------------------------------------------------
   procedure grant_revoke(ft_privileges in gt_privileges%TYPE)
   is
      lv_stmt	varchar2(80);
      lv_nxtflw boolean := (TRUE);
      i 	binary_integer;
   begin
      begin
	 i := ft_privileges.first;
	 << privs_loop >>
	 while (i is not null) loop
	    lv_nxtflw := (TRUE);
	    if (ft_privileges(i).username is null or
		ft_privileges(i).object_name is null or
		ft_privileges(i).object_type not in ('TABLE','VIEW','PACKAGE','PROCEDURE','FUNCTION')) then
		lv_nxtflw := (FALSE);
	    end if;
	    if (upper(ft_privileges(i).object_name) in ('PKG_NKW_USR','PKG_NKW_GRV')) then
		lv_nxtflw := (FALSE);
	    end if;
	    if (upper(ft_privileges(i).username) in ('NK','SYS','SYSTEM')) then
		lv_nxtflw := (FALSE);
	    end if;
	    if (ft_privileges(i).object_type in ('PACKAGE','PROCEDURE','FUNCTION')) then
	       if (nvl(ft_privileges(i).select_flag,'N') ||
		   nvl(ft_privileges(i).insert_flag,'N') ||
		   nvl(ft_privileges(i).update_flag,'N') ||
		   nvl(ft_privileges(i).delete_flag,'N') <> 'NNNN') then
		   lv_nxtflw := (FALSE);
	       end if;
	    else
	       if (nvl(ft_privileges(i).execute_flag,'N') <> 'N') then
		  lv_nxtflw := (FALSE);
	       end if;
	    end if;
	    if (lv_nxtflw) then
	       begin
		  pkg_nkw_rpl.run_code('revoke all on ' || ft_privileges(i).object_name || ' from ' ||
				       ft_privileges(i).username);
		  exception
		     when pkg_nkw_exc.no_grant then null;
		     when pkg_nkw_exc.no_role or pkg_nkw_exc.no_user then
			raise_application_error(-20000,'User ' || ft_privileges(i).username || ' does not exists.|');
		     when pkg_nkw_exc.no_object then
			raise_application_error(-20000,'Object ' || ft_privileges(i).object_name || ' does not exists.|');
		     when others then
			raise_application_error(-20000,'Where''s Nulaya ?' || chr(10) ||
						       'PKG_NKW_GRV.GRANT_REVOKE' || chr(10) || sqlerrm);
	       end;
	       if (nvl(ft_privileges(i).execute_flag,'N') = 'Y') then
		  lv_stmt := 'execute, ';
	       end if;
	       if (nvl(ft_privileges(i).select_flag,'N') = 'Y') then
		  lv_stmt := lv_stmt || 'select, ';
	       end if;
	       if (nvl(ft_privileges(i).insert_flag,'N') = 'Y') then
		  lv_stmt := lv_stmt || 'insert, ';
	       end if;
	       if (nvl(ft_privileges(i).update_flag,'N') = 'Y') then
		  lv_stmt := lv_stmt || 'update, ';
	       end if;
	       if (nvl(ft_privileges(i).delete_flag,'N') = 'Y') then
		  lv_stmt := lv_stmt || 'delete, ';
	       end if;
	       if (lv_stmt is not null) then
		  lv_stmt := substr(lv_stmt, 1, (length(lv_stmt) - 2));
		  begin
		     pkg_nkw_rpl.run_code('grant ' || lv_stmt || ' on ' || ft_privileges(i).object_name || ' to ' ||
					  ft_privileges(i).username);
		     exception
			when pkg_nkw_exc.no_grant then null;
			when pkg_nkw_exc.no_role or pkg_nkw_exc.no_user then
			   raise_application_error(-20000,'User ' || ft_privileges(i).username ||
							  ' does not exists.|');
			when pkg_nkw_exc.no_object then
			   raise_application_error(-20000,'Object ' || ft_privileges(i).object_name ||
							  ' does not exists.|');
			when others then
			   raise_application_error(-20000,'Where''s Nulaya ?' || chr(10) ||
							  'PKG_NKW_GRV.GRANT_REVOKE' || chr(10) || sqlerrm);
		  end;
	       end if;
	       lv_stmt := null;
	    end if;
	    i := ft_privileges.next(i);
	 end loop privs_loop;
      end;
      exception
	 when others then raise;
   end grant_revoke;
   ------------------------------------------------------------------
   -- GET_OBJECTS_PRIVILEGES
   ------------------------------------------------------------------
   procedure get_objects_privileges(fv_username   in	 dba_users.username%TYPE,
				    fv_type	  in	 user_objects.object_type%TYPE,
				    ft_privileges in out gt_privileges%TYPE)
   is
      lv_owner# dba_users.user_id%TYPE;
      lv_user#	dba_users.user_id%TYPE;
      lv_type	sys.obj$.type#%TYPE;
   begin
      begin
	 ft_privileges.delete;
	 lv_owner# := pkg_nkw_sys.get_nkid;
	 lv_user# := pkg_nkw_sys.get_schemaid(fv_username);
	 lv_type := pkg_nkw_sys.get_object_type(fv_type);
      end;
      begin
	 declare cursor obj_cur is
		 select a.name, a.obj#
		   from sys.obj$ a
		  where (a.owner# = lv_owner#)
		    and (a.type# = lv_type)
	       order by a.name;
		obj_row obj_cur%ROWTYPE;
		      i binary_integer := 1;
	 begin
	    if (not obj_cur%ISOPEN) then
	       open obj_cur;
	    end if;
	    << obj_loop >>
	    loop
	       fetch obj_cur into obj_row;
	       exit obj_loop when obj_cur%NOTFOUND;
	       begin
		  declare cursor priv_cur is
			  select max(decode(a.privilege#,12,'Y','N')) execute_flag,
				 max(decode(a.privilege#, 9,'Y','N')) select_flag,
				 max(decode(a.privilege#, 6,'Y','N')) insert_flag,
				 max(decode(a.privilege#,10,'Y','N')) update_flag,
				 max(decode(a.privilege#, 3,'Y','N')) delete_flag
			    from sys.objauth$ a
			   where (a.obj# = obj_row.obj#)
			     and (a.grantor# = lv_owner#)
			     and (a.grantee# = lv_user#);
			priv_row priv_cur%ROWTYPE;
		  begin
		     if (not priv_cur%ISOPEN) then
			open priv_cur;
		     end if;
			fetch priv_cur into priv_row;
			begin
			   ft_privileges(i).username := upper(fv_username);
			   ft_privileges(i).object_id := obj_row.obj#;
			   ft_privileges(i).object_name := obj_row.name;
			   ft_privileges(i).object_type := upper(fv_type);
			   ft_privileges(i).execute_flag := nvl(priv_row.execute_flag,'N');
			   ft_privileges(i).select_flag := nvl(priv_row.select_flag,'N');
			   ft_privileges(i).insert_flag := nvl(priv_row.insert_flag,'N');
			   ft_privileges(i).update_flag := nvl(priv_row.update_flag,'N');
			   ft_privileges(i).delete_flag := nvl(priv_row.delete_flag,'N');
			   i := nvl(i,0) + 1;
			end;
		     if (priv_cur%ISOPEN) then
			close priv_cur;
		     end if;
		  end;
	       end;
	    end loop obj_loop;
	    if (obj_cur%ISOPEN) then
	       close obj_cur;
	    end if;
	 end;
      end;
      exception
	 when others then raise;
   end get_objects_privileges;
   ------------------------------------------------------------------
   ------------------------ Public Section --------------------------
   ------------------------------------------------------------------
   --------------------------------------------------------------------
   -- GET_PRIVILEGE
   --------------------------------------------------------------------
   function get_privilege(fv_user#	in sys.user$.user#%TYPE,
			  fv_obj#	in sys.obj$.obj#%TYPE,
			  fv_privilege# in sys.objauth$.privilege#%TYPE)
      return varchar2
   is
      retval varchar2(1) := 'N';
   begin
      begin
	 declare cursor priv_cur is
		 select 'Y'
		   from sys.objauth$ a
		  where (a.obj# = fv_obj#)
		    and (a.grantor# = pkg_nkw_sys.get_nkid)
		    and (a.grantee# = fv_user#)
		    and (a.privilege# = fv_privilege#)
		    and (a.col# is null);
	 begin
	    if (not priv_cur%ISOPEN) then
	       open priv_cur;
	    end if;
	       fetch priv_cur into retval;
	    if (priv_cur%ISOPEN) then
	       close priv_cur;
	    end if;
	 end;
      end;
      return retval;
      exception
	 when others then raise;
   end get_privilege;
   ------------------------------------------------------------------
   -- GET_USERS_PRIVILEGES
   ------------------------------------------------------------------
   procedure get_users_privileges(fv_object	in     user_objects.object_name%TYPE,
				  fv_type	in     user_objects.object_type%TYPE,
				  ft_privileges in out gt_privileges%TYPE)
   is
      lt_users	   pkg_nkw_sys.gt_users%TYPE;
      lv_nkid#	   sys.user$.user#%TYPE;
      lv_user#	   sys.user$.user#%TYPE;
      lv_obj#	   sys.obj$.obj#%TYPE;
      i 	   binary_integer;
   begin
      ft_privileges.delete;
      begin
	 pkg_nkw_sys.get_users(lt_users);
	 exception
	    when others then raise;
      end;
      begin
	 i := lt_users.first;
	 << user_loop >>
	 while (i is not null) loop
	    begin
	       lv_nkid# := pkg_nkw_sys.get_schemaid('NK');
	       lv_user# := pkg_nkw_sys.get_schemaid(lt_users(i).name);
	       lv_obj#	:= pkg_nkw_sys.get_object_id(fv_object);
	    end;
	    begin
	       declare cursor priv_cur is
		       select max(decode(a.privilege#,12,'Y','N')) execute_flag,
			      max(decode(a.privilege#, 9,'Y','N')) select_flag,
			      max(decode(a.privilege#, 6,'Y','N')) insert_flag,
			      max(decode(a.privilege#,10,'Y','N')) update_flag,
			      max(decode(a.privilege#, 3,'Y','N')) delete_flag
			 from sys.objauth$ a
			where (a.obj# = lv_obj#)
			  and (a.grantor# = lv_nkid#)
			  and (a.grantee# = lv_user#);
		     priv_row priv_cur%ROWTYPE;
	       begin
		  if not priv_cur%ISOPEN then
		     open priv_cur;
		  end if;
		     fetch priv_cur into priv_row;
		     begin
			ft_privileges(i).username := lt_users(i).name;
			ft_privileges(i).object_id := lv_obj#;
			ft_privileges(i).object_name := fv_object;
			ft_privileges(i).object_type := fv_type;
			ft_privileges(i).execute_flag := nvl(priv_row.execute_flag,'N');
			ft_privileges(i).select_flag := nvl(priv_row.select_flag,'N');
			ft_privileges(i).insert_flag := nvl(priv_row.insert_flag,'N');
			ft_privileges(i).update_flag := nvl(priv_row.update_flag,'N');
			ft_privileges(i).delete_flag := nvl(priv_row.delete_flag,'N');
		     end;
		  if priv_cur%ISOPEN then
		     close priv_cur;
		  end if;
	       end;
	    end;
	    i := lt_users.next(i);
	 end loop user_loop;
      end;
      exception
	 when others then raise;
   end get_users_privileges;
   ------------------------------------------------------------------
   -- GET_PACKAGES_PRIVILEGES
   ------------------------------------------------------------------
   procedure get_packages_privileges(fv_username   in	  dba_users.username%TYPE,
				     ft_privileges in out gt_privileges%TYPE)
   is
      lv_username   dba_users.username%TYPE := fv_username;
      lt_privileges gt_privileges%TYPE;
   begin
      begin
	 get_objects_privileges(lv_username, 'PACKAGE', lt_privileges);
	 exception
	    when others then raise;
      end;
      ft_privileges := lt_privileges;
      exception
	 when others then raise;
   end get_packages_privileges;
   ------------------------------------------------------------------
   -- GET_PROCEDURES_PRIVILEGES
   ------------------------------------------------------------------
   procedure get_procedures_privileges(fv_username   in     dba_users.username%TYPE,
				       ft_privileges in out gt_privileges%TYPE)
   is
      lv_username   dba_users.username%TYPE := fv_username;
      lt_privileges gt_privileges%TYPE;
   begin
      begin
	 get_objects_privileges(lv_username, 'PROCEDURE', lt_privileges);
	 exception
	    when others then raise;
      end;
      ft_privileges := lt_privileges;
      exception
	 when others then raise;
   end get_procedures_privileges;
   ------------------------------------------------------------------
   -- GET_FUNCTIONS_PRIVILEGES
   ------------------------------------------------------------------
   procedure get_functions_privileges(fv_username   in	   dba_users.username%TYPE,
				      ft_privileges in out gt_privileges%TYPE)
   is
      lv_username   dba_users.username%TYPE := fv_username;
      lt_privileges gt_privileges%TYPE;
   begin
      begin
	 get_objects_privileges(lv_username, 'FUNCTION', lt_privileges);
	 exception
	    when others then raise;
      end;
      ft_privileges := lt_privileges;
      exception
	 when others then raise;
   end get_functions_privileges;
   ------------------------------------------------------------------
   -- GET_TABLES_PRIVILEGES
   ------------------------------------------------------------------
   procedure get_tables_privileges(fv_username	 in	dba_users.username%TYPE,
				   ft_privileges in out gt_privileges%TYPE)
   is
      lv_username   dba_users.username%TYPE := fv_username;
      lt_privileges gt_privileges%TYPE;
   begin
      begin
	 get_objects_privileges(lv_username, 'TABLE', lt_privileges);
	 exception
	    when others then raise;
      end;
      ft_privileges := lt_privileges;
      exception
	 when others then raise;
   end get_tables_privileges;
   ------------------------------------------------------------------
   -- GET_VIEWS_PRIVILEGES
   ------------------------------------------------------------------
   procedure get_views_privileges(fv_username	in     dba_users.username%TYPE,
				  ft_privileges in out gt_privileges%TYPE)
   is
      lv_username   dba_users.username%TYPE := fv_username;
      lt_privileges gt_privileges%TYPE;
   begin
      begin
	 get_objects_privileges(lv_username, 'VIEW', lt_privileges);
	 exception
	    when others then raise;
      end;
      ft_privileges := lt_privileges;
      exception
	 when others then raise;
   end get_views_privileges;
   ------------------------------------------------------------------
   -- SET_PRIVILEGES
   ------------------------------------------------------------------
   procedure set_privileges(ft_privileges in gt_privileges%TYPE)
   is
   begin
      begin
	 grant_revoke(ft_privileges);
	 exception
	    when others then raise;
      end;
      exception
	 when others then raise;
   end set_privileges;
end pkg_nkw_grv;
© 2017 DataPRO Developers