<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1842515041905289802</id><updated>2011-07-07T18:38:59.003-07:00</updated><category term='Oracle FORMS JDAPI FORMS CHAGE CONTROL'/><category term='Oracle RBS profile option all levels'/><category term='Oracle sqlplus Restrict TRUNCATE CONNECT INSERT UPDATE DELETE'/><category term='CHANGE CONTROL FILE SYSTEM OS PERL BASELINE'/><title type='text'>Governance, Risk, and Compliance</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ash-grc.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ash-grc.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ashok RS</name><uri>http://www.blogger.com/profile/07953771764622741798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_iwkZdl31-zA/S3Va4fh7zrI/AAAAAAAAAAM/VzqbMo0DlEc/S220/Ash_Subramanian_pix-2-1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1842515041905289802.post-815353303235974265</id><published>2010-02-12T11:57:00.001-08:00</published><updated>2010-02-12T12:03:17.600-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CHANGE CONTROL FILE SYSTEM OS PERL BASELINE'/><title type='text'>Change Control: PERL Directory and File Permission (statistics) recursively</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Change Control: PERL Directory and File Permission (statistics) recursively&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;*******************************************************************************************&lt;br /&gt;Programming Language: Perl&lt;br /&gt;Calling Method: ./filePermissions.pl &amp;lt;dir Offset&amp;gt; &amp;lt;depth&amp;gt;  &amp;lt;dir&amp;gt; or &amp;lt;file&amp;gt;&lt;br /&gt;Example-1-: ./filePermissions.pl "/tmp" "n" "dir"&lt;br /&gt;            where starting dir is "/tmp" for "n" (depth=all levels) and list the directories recursively&lt;br /&gt;Example-2-: ./filePermissions.pl "/usr" "1" ""&lt;br /&gt;            where starting dir is "/usr" for "1" level of depth and lists all files and directories&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Recommendations:&lt;/span&gt;&lt;br /&gt;===================&lt;br /&gt;Run this program periodically. Grab the output, version it, BASELINE it, and archive it.&lt;br /&gt;Subsequent time, the output of this report for the same criteria must be compared with the BASELINE. Report any anomalies.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Fields Reported: &lt;/span&gt;  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)&lt;br /&gt;==========================================================================================================&lt;br /&gt;&lt;br /&gt;dev:ID of device containing file.  If this value and following has no meaning on the platform, it will contain undefined value.&lt;br /&gt;ino: inode number.&lt;br /&gt;mode: Unix mode for file.&lt;br /&gt;nlink: Number of hard links.&lt;br /&gt;uid:User ID of owner.&lt;br /&gt;gid: Group ID of owner.&lt;br /&gt;rdev: Device ID (if special file).&lt;br /&gt;size:Total size, in bytes.&lt;br /&gt;atime: Time of last access as DateTime object.&lt;br /&gt;mtime:Time of last modification as DateTime object.&lt;br /&gt;ctime: Time of last status change as DateTime object.&lt;br /&gt;blksize: Block size for filesystem I/O.&lt;br /&gt;blocks: Number of blocks allocated.&lt;br /&gt;&lt;br /&gt;Custom:&lt;br /&gt;==========&lt;br /&gt;Feel free to modify to suite your requirements.&lt;br /&gt;The MD5 checksum has been disabled from this script because of performance issues.&lt;br /&gt;You may want to add, edit or remove field names that are being reported.&lt;br /&gt;&lt;br /&gt;***********************************  Code Begins   ****************************************&lt;br /&gt;&lt;br /&gt;P=`for L  in \`echo /usr/bin/perl /usr/local/perl5/bin/perl /usr/local/bin/perl /usr/local/bin/perl5 /bin/perl\`&lt;br /&gt;do&lt;br /&gt; if [ -f $L ]; then&lt;br /&gt;     V=\`$L -V | grep 'Summary' | awk '{ print \$4 }' \`&lt;br /&gt;   if [ "$V" = "perl5" ]; then&lt;br /&gt;     echo $L&lt;br /&gt;     exit&lt;br /&gt;   fi&lt;br /&gt; fi&lt;br /&gt;done`;$P -e '&lt;br /&gt;use Getopt::Long;&lt;br /&gt; &lt;br /&gt;my $verbose=0;&lt;br /&gt;my @excludefiles;&lt;br /&gt; &lt;br /&gt;$md5Found = 0;&lt;br /&gt;#BEGIN{&lt;br /&gt;#  $md5Found = ;&lt;br /&gt;#  eval {require Digest::MD5;};&lt;br /&gt;#  if ($@) {&lt;br /&gt;#   $md5Found = 0;&lt;br /&gt;#  };&lt;br /&gt;#}&lt;br /&gt; &lt;br /&gt;$path = shift;&lt;br /&gt;$depth = shift;&lt;br /&gt;if ($depth eq "") {&lt;br /&gt;  $depth = "n";&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;$filter = shift;&lt;br /&gt;if ($filter eq "") {&lt;br /&gt;  $filter = "all";&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;@excludefiles = split(",", $exclude);&lt;br /&gt; &lt;br /&gt;#for my $path (@ARGV) {&lt;br /&gt;  $path =~ s{//}{/};               # remove multiple slashes&lt;br /&gt;  my $fullpath= makeFullPath($path, "", "");&lt;br /&gt; &lt;br /&gt;  if (-d $path) {&lt;br /&gt;    processDirectory($path, "", $md5Found, $depth);&lt;br /&gt;  } else {&lt;br /&gt;    print("$path not found\n");&lt;br /&gt;    exit(-1);&lt;br /&gt;  }&lt;br /&gt;  processFile($fullpath, $md5Found);&lt;br /&gt;#}&lt;br /&gt; &lt;br /&gt;exit(0);&lt;br /&gt; &lt;br /&gt;sub processDirectory {&lt;br /&gt;  my ($root, $path, $md5Found, $currDepth)= @_;&lt;br /&gt;  $currDepth-- if ($currDepth ne "n");&lt;br /&gt; &lt;br /&gt;  my $files= getFilelist(makeFullPath($root, $path));&lt;br /&gt; &lt;br /&gt;  for my $file (@$files) {&lt;br /&gt;    next if ($file eq "." || $file eq "..");&lt;br /&gt;    my $fullpath= makeFullPath($root, $path, $file);&lt;br /&gt;    my $relative= makeFullPath($path, $file);&lt;br /&gt; &lt;br /&gt;    if (!isInIgnoreList($relative)) {&lt;br /&gt;      if ((-f $fullpath) &amp;&amp; ($filter ne "dir")) {&lt;br /&gt;        processFile($fullpath, $md5Found);&lt;br /&gt;      }&lt;br /&gt;      elsif (-d $fullpath) {&lt;br /&gt;        processFile($fullpath, 0);&lt;br /&gt;        if (($currDepth eq "n") || ($currDepth &gt; 0))&lt;br /&gt;        {&lt;br /&gt;             processDirectory($root, $relative, $md5Found, $currDepth);&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub makeFullPath {&lt;br /&gt;  my ($full, @parts)= @_;&lt;br /&gt; &lt;br /&gt;  $full ||="";&lt;br /&gt;  for my $path (@parts) {&lt;br /&gt;    next if (!defined $path);&lt;br /&gt;    $path =~ s{^/}{};               # remove leading slash&lt;br /&gt;    $full =~ s{/?$}{/$path};  # remove trailing slash, append path&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  return $full;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub getFilelist {&lt;br /&gt;  my ($path)= @_;&lt;br /&gt; &lt;br /&gt;  die "$!: reading $path\n" unless opendir(DIR, $path);&lt;br /&gt; &lt;br /&gt;  my @files= readdir DIR;&lt;br /&gt;  closedir DIR;&lt;br /&gt; &lt;br /&gt;  return \@files;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub processFile {&lt;br /&gt;  my ($filename, $md5Found)= @_;&lt;br /&gt; &lt;br /&gt;  $hex = -1;&lt;br /&gt;  if ($md5Found) {&lt;br /&gt;    open(FILE, $filename) or return;&lt;br /&gt;    binmode(FILE);&lt;br /&gt;    $hex = Digest::MD5-&gt;new-&gt;addfile(*FILE)-&gt;hexdigest;&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);&lt;br /&gt; &lt;br /&gt;  $uname = getpwuid($uid);&lt;br /&gt;  $gname = getgrgid($gid);&lt;br /&gt; &lt;br /&gt;  printf("\"$filename\",\"$dev\",\"$ino\",\"%04o\",\"$nlink\",\"$uid\",\"$gid\",\"$rdev\",\"$size\",\"%s\",\"%s\",\"%s\",\"$gname\",\"$uname\",\"$hex\"\n",&lt;br /&gt;           ($mode &amp; 07777),&lt;br /&gt;           get_real_time($atime),get_real_time($mtime),get_real_time($ctime));&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub isInIgnoreList {&lt;br /&gt;  my $fullfilename= shift;&lt;br /&gt; &lt;br /&gt;  for my $pattern (@excludefiles) {&lt;br /&gt;    if (matches($fullfilename, glob2pat("/$pattern"))) {&lt;br /&gt;      return 1;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub matches {&lt;br /&gt;  my ($filename, $pattern)= @_;&lt;br /&gt; &lt;br /&gt;  return ($filename =~ m{$pattern}i);&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub glob2pat {&lt;br /&gt;  my $globstr = shift;&lt;br /&gt;  my %patmap = (&lt;br /&gt;        "." =&gt; "\.",&lt;br /&gt;        "*" =&gt; ".*",&lt;br /&gt;        "?" =&gt; ".",&lt;br /&gt;        "[" =&gt; "[",&lt;br /&gt;        "]" =&gt; "]",&lt;br /&gt;  );&lt;br /&gt;  $globstr =~ s{(.)} { $patmap{$1} || "\Q$1" }ge;&lt;br /&gt;  return $globstr;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub get_real_time ($) {&lt;br /&gt;  my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime $_[0];&lt;br /&gt;  $year += 1900;&lt;br /&gt;  $mon += 1;      &lt;br /&gt;  return "$year\-$mon\-$mday $hour:$min:$sec";&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub get_user($) {&lt;br /&gt;  ($username) = split(":", `getent passwd $_[0]`); &lt;br /&gt;  return($username);&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;sub get_group($) {&lt;br /&gt;  ($groupname) = split(":", `getent group $_[0]`);&lt;br /&gt;  return($groupname);&lt;br /&gt;}' "$1" "$2" "$3"&lt;br /&gt;&lt;br /&gt;***********************************  Code Ends   ****************************************&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1842515041905289802-815353303235974265?l=ash-grc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ash-grc.blogspot.com/feeds/815353303235974265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ash-grc.blogspot.com/2010/02/change-control-perl-directory-and-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/815353303235974265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/815353303235974265'/><link rel='alternate' type='text/html' href='http://ash-grc.blogspot.com/2010/02/change-control-perl-directory-and-file.html' title='Change Control: PERL Directory and File Permission (statistics) recursively'/><author><name>Ashok RS</name><uri>http://www.blogger.com/profile/07953771764622741798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_iwkZdl31-zA/S3Va4fh7zrI/AAAAAAAAAAM/VzqbMo0DlEc/S220/Ash_Subramanian_pix-2-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1842515041905289802.post-8413320391338106661</id><published>2010-02-12T11:07:00.000-08:00</published><updated>2010-02-12T11:10:30.087-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle FORMS JDAPI FORMS CHAGE CONTROL'/><title type='text'>Oracle EBS: jdapi - API to read Oracle Forms</title><content type='html'>Oracle EBS: jdapi - API to read Oracle Forms&lt;br /&gt;&lt;br /&gt;The JDAPI from Oracle would allow us to build a complete change control around Oracle Forms by programatically editing FMB files.&lt;br /&gt;&lt;br /&gt;If any customer requires this functionality, the capability can be achieve by JDAPI.&lt;br /&gt;&lt;br /&gt;Reference: http://www.oracle.com/technology/products/forms/files/10gR2/1012jdapiDoc.zip&lt;br /&gt;Reference valid as of 12-Feb-2010&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1842515041905289802-8413320391338106661?l=ash-grc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ash-grc.blogspot.com/feeds/8413320391338106661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ash-grc.blogspot.com/2010/02/oracle-ebs-api-to-read-oracle-forms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/8413320391338106661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/8413320391338106661'/><link rel='alternate' type='text/html' href='http://ash-grc.blogspot.com/2010/02/oracle-ebs-api-to-read-oracle-forms.html' title='Oracle EBS: jdapi - API to read Oracle Forms'/><author><name>Ashok RS</name><uri>http://www.blogger.com/profile/07953771764622741798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_iwkZdl31-zA/S3Va4fh7zrI/AAAAAAAAAAM/VzqbMo0DlEc/S220/Ash_Subramanian_pix-2-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1842515041905289802.post-1948064644642650992</id><published>2010-02-12T10:38:00.000-08:00</published><updated>2010-02-12T10:40:49.352-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle sqlplus Restrict TRUNCATE CONNECT INSERT UPDATE DELETE'/><title type='text'>Oracle sqlplus: Restrict TRUNCATE, CONNECT, INSERT, UPDATE and DELETE capabilities</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Oracle sqlplus: Restrict TRUNCATE, CONNECT, INSERT, UPDATE and DELETE capabilities&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;****************************** Code Begins **************************************************&lt;br /&gt;&lt;br /&gt;REM &lt;br /&gt;rem Script Description: This script is designed to restrict the TRUNCATE, CONNECT, INSERT, UPDATE and DELETE capabilities&lt;br /&gt;rem                     of end-users from within SQL*Plus. It was implemented to perform weekly maintenance of&lt;br /&gt;rem                     the product user profile table.&lt;br /&gt;rem&lt;br /&gt;rem Output file:        prodprof.sql&lt;br /&gt;rem&lt;br /&gt;rem Prepared By:        Oracle Resource Stop&lt;br /&gt;rem&lt;br /&gt;rem Usage Information:  SQLPLUS SYS/pswd&lt;br /&gt;rem                     @prodprofmaint.sql&lt;br /&gt;rem&lt;br /&gt;&lt;br /&gt;set pages 10000&lt;br /&gt;set heading off&lt;br /&gt;set lines 200&lt;br /&gt;set feedback off&lt;br /&gt;&lt;br /&gt;spool prodprof.sql&lt;br /&gt;&lt;br /&gt;rem&lt;br /&gt;rem The following adds any new users to the PRODUCT_USER_PROFILE table using the standard access restrictions.&lt;br /&gt;rem&lt;br /&gt;&lt;br /&gt;select 'insert into product_user_profile(product,userid,attribute,char_value) values ('||&lt;br /&gt;       '''SQL*Plus'','''||username||''',''INSERT'',''DISABLED'''||');',&lt;br /&gt;       'insert into product_user_profile(product,userid,attribute,char_value) values ('||&lt;br /&gt;       '''SQL*Plus'','''||username||''',''UPDATE'',''DISABLED'''||');',&lt;br /&gt;       'insert into product_user_profile(product,userid,attribute,char_value) values ('||&lt;br /&gt;       '''SQL*Plus'','''||username||''',''DELETE'',''DISABLED'''||');',&lt;br /&gt;       'insert into product_user_profile(product,userid,attribute,char_value) values ('||&lt;br /&gt;       '''SQL*Plus'','''||username||''',''CONNECT'',''DISABLED'''||');',&lt;br /&gt;       'insert into product_user_profile(product,userid,attribute,char_value) values ('||&lt;br /&gt;       '''SQL'','''||username||''',''TRUNCATE'',''DISABLED'''||');'&lt;br /&gt;from dba_users a&lt;br /&gt;  where not exists&lt;br /&gt;          (select * from product_user_profile&lt;br /&gt;           where userid = a.username);&lt;br /&gt;spool off&lt;br /&gt;&lt;br /&gt;@prodprof&lt;br /&gt;&lt;br /&gt;rem&lt;br /&gt;rem The following removes and deleted users from the PRODUCT_USER_PROFILE table.&lt;br /&gt;rem&lt;br /&gt;&lt;br /&gt;delete from product_user_profile a&lt;br /&gt;where not exists&lt;br /&gt;         (select * from dba_users&lt;br /&gt;          where username = a.userid);&lt;br /&gt;&lt;br /&gt;commit;&lt;br /&gt;&lt;br /&gt;set pages 1000&lt;br /&gt;set heading on&lt;br /&gt;set lines 80&lt;br /&gt;set feedback on&lt;br /&gt;&lt;br /&gt;****************************** Code Ends **************************************************&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1842515041905289802-1948064644642650992?l=ash-grc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ash-grc.blogspot.com/feeds/1948064644642650992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ash-grc.blogspot.com/2010/02/oracle-sqlplus-restrict-truncate.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/1948064644642650992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/1948064644642650992'/><link rel='alternate' type='text/html' href='http://ash-grc.blogspot.com/2010/02/oracle-sqlplus-restrict-truncate.html' title='Oracle sqlplus: Restrict TRUNCATE, CONNECT, INSERT, UPDATE and DELETE capabilities'/><author><name>Ashok RS</name><uri>http://www.blogger.com/profile/07953771764622741798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_iwkZdl31-zA/S3Va4fh7zrI/AAAAAAAAAAM/VzqbMo0DlEc/S220/Ash_Subramanian_pix-2-1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1842515041905289802.post-6666348684029879172</id><published>2010-02-12T10:34:00.001-08:00</published><updated>2010-02-12T10:41:11.465-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle RBS profile option all levels'/><title type='text'>ORACLE EBS: SQL to get the profile option values and key columns at all levels.</title><content type='html'>&lt;span style="font-weight:bold;"&gt;ORACLE EBS: SQL to get the profile option values and key columns at all levels.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;   Description: This script will generate a list of all profile values in an Oracle Apps 11i env.&lt;br /&gt;                It lists the profiles by Level (Site,Application,Responsibility,User) with relevant fields&lt;br /&gt;                and provides the ability to search on any of the listed fields.&lt;br /&gt;&lt;br /&gt;                Running this SQL periodically and doing a different between the output provides the changes to profile option values..&lt;br /&gt;&lt;br /&gt;       Warning: This SQL runs for a long time and could generate about 170K rows when run against Large databases.&lt;br /&gt;&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;SELECT DECODE(level_id,10001,'Site',10002,'Application',10003,'Responsibility',10004,'USER') "Profile_Level", &lt;br /&gt;&lt;br /&gt;DECODE(level_id,10001,NULL,10002,fa.application_name,10003,fr.responsibility_name,10004,fu.user_name) "Non_Site_Description"&lt;br /&gt;        , fu.user_name&lt;br /&gt;        , fpov.user_profile_option_name&lt;br /&gt;        , fpov.profile_option_name&lt;br /&gt;        , fpova.profile_option_value&lt;br /&gt;        , fpova.creation_date       &lt;br /&gt;        , fpova.last_update_date   &lt;br /&gt;        , fpov.HIERARCHY_TYPE&lt;br /&gt;        , fpov.START_DATE_ACTIVE&lt;br /&gt;        , fpov.END_DATE_ACTIVE&lt;br /&gt;        , fpov.WRITE_ALLOWED_FLAG&lt;br /&gt;        , fpov.READ_ALLOWED_FLAG&lt;br /&gt;        , fpov.USER_CHANGEABLE_FLAG&lt;br /&gt;        , fpov.USER_VISIBLE_FLAG&lt;br /&gt;        , fpov.SITE_ENABLED_FLAG&lt;br /&gt;        , fpov.SITE_UPDATE_ALLOWED_FLAG&lt;br /&gt;        , fpov.APP_ENABLED_FLAG&lt;br /&gt;        , fpov.APP_UPDATE_ALLOWED_FLAG&lt;br /&gt;        , fpov.RESP_ENABLED_FLAG&lt;br /&gt;        , fpov.RESP_UPDATE_ALLOWED_FLAG&lt;br /&gt;        , fpov.USER_ENABLED_FLAG&lt;br /&gt;        , fpov.USER_UPDATE_ALLOWED_FLAG&lt;br /&gt;        , fpov.SERVER_ENABLED_FLAG&lt;br /&gt;        , fpov.SERVER_UPDATE_ALLOWED_FLAG&lt;br /&gt;        , fpov.ORG_ENABLED_FLAG&lt;br /&gt;        , fpov.ORG_UPDATE_ALLOWED_FLAG&lt;br /&gt;FROM fnd_profile_options_vl fpov&lt;br /&gt;    , fnd_profile_option_values fpova&lt;br /&gt;    , fnd_application_tl fa               -- table inclusion when looking at application joins&lt;br /&gt;    , fnd_responsibility_tl fr            -- table inclusion when looking at responsibility joins&lt;br /&gt;    , fnd_user fu                         -- table inclusion when looking at user joins&lt;br /&gt;    , fnd_user fu2&lt;br /&gt;WHERE fpov.application_id = fpova.application_id&lt;br /&gt;  AND fpov.profile_option_id = fpova.profile_option_id&lt;br /&gt;  AND fpov.start_date_active &lt;= SYSDATE&lt;br /&gt;  AND NVL(fpov.end_date_active,SYSDATE) &gt;= SYSDATE&lt;br /&gt;  AND (fpov.site_enabled_flag = 'Y' OR fpov.app_enabled_flag = 'Y' OR fpov.resp_enabled_flag = 'Y' OR fpov.user_enabled_flag = 'Y')&lt;br /&gt;  AND fpova.level_value = fa.application_id (+)       -- join for application values&lt;br /&gt;  AND fpova.level_value = fr.responsibility_id (+)    -- join for responsibility values&lt;br /&gt;  AND fpova.level_value = fu.user_id (+)              -- join for user values&lt;br /&gt;  AND fpova.last_updated_by = fu2.user_id (+)         -- join for update by user values&lt;br /&gt;ORDER BY "User Profile Option Name", "Profile Level";&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1842515041905289802-6666348684029879172?l=ash-grc.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ash-grc.blogspot.com/feeds/6666348684029879172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ash-grc.blogspot.com/2010/02/oracle-ebs-sql-to-get-profile-option.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/6666348684029879172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1842515041905289802/posts/default/6666348684029879172'/><link rel='alternate' type='text/html' href='http://ash-grc.blogspot.com/2010/02/oracle-ebs-sql-to-get-profile-option.html' title='ORACLE EBS: SQL to get the profile option values and key columns at all levels.'/><author><name>Ashok RS</name><uri>http://www.blogger.com/profile/07953771764622741798</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_iwkZdl31-zA/S3Va4fh7zrI/AAAAAAAAAAM/VzqbMo0DlEc/S220/Ash_Subramanian_pix-2-1.jpg'/></author><thr:total>0</thr:total></entry></feed>
