<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>PeopleSoft Tipster &#187; Security</title>
	<atom:link href="http://peoplesofttipster.com/category/security/feed/" rel="self" type="application/rss+xml" />
	<link>http://peoplesofttipster.com</link>
	<description>Tips and Tricks with a PeopleSoft slant</description>
	<lastBuildDate>Tue, 23 Feb 2010 09:30:41 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='peoplesofttipster.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/67bbe5b1d4e8b979a53c0881ce8a06e3?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>PeopleSoft Tipster &#187; Security</title>
		<link>http://peoplesofttipster.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://peoplesofttipster.com/osd.xml" title="PeopleSoft Tipster" />
	<atom:link rel='hub' href='http://peoplesofttipster.com/?pushpress=hub'/>
		<item>
		<title>Creating an entirely read-only user in PeopleSoft</title>
		<link>http://peoplesofttipster.com/2008/08/28/creating-an-entirely-read-only-user-in-peoplesoft/</link>
		<comments>http://peoplesofttipster.com/2008/08/28/creating-an-entirely-read-only-user-in-peoplesoft/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 22:15:00 +0000</pubDate>
		<dc:creator>Tipster</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PeopleSoft]]></category>
		<category><![CDATA[PeopleTools]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://duncandavies.wordpress.com/?p=139</guid>
		<description><![CDATA[On big projects it is quite likely that large numbers of developers have access to a many environments.  Occasionally they can have access to environment which is quite important, for instance one that the customer is using for training or testing.
To reduce the likelihood of developers accidentally deleting some data that they shouldn&#8217;t it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peoplesofttipster.com&blog=893910&post=139&subd=duncandavies&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>On big projects it is quite likely that large numbers of developers have access to a many environments.  Occasionally they can have access to environment which is quite important, for instance one that the customer is using for training or testing.</p>
<p>To reduce the likelihood of developers accidentally deleting some data that they shouldn&#8217;t it would be quite normal to remove their access to the environment altogether.  However if they need access for troubleshooting purposes then (at least on projects I&#8217;ve seen) it&#8217;s quite normal for developers to be told &#8220;OK, you can have access, but be careful not to do anything destructive&#8221;.  Occasionally &#8211; as with everything &#8211; things can go wrong.  Either someone forgets which environment they&#8217;re in, or does something with unintended consequences.  An alternative to the &#8220;just be careful&#8221; approach would be to create an entirely read-only user profile (i.e. one that has display only privileges to every component system-wide).</p>
<p>A read-only user profile is shown in screenshot below, where no fields are editable and the save button is inactivated:</p>
<p><img class="size-full wp-image-143 alignnone" src="http://duncandavies.files.wordpress.com/2008/08/read-only_job.jpg?w=460&#038;h=374" alt="" width="460" height="374" /></p>
<p>Also, on Run Control pages the &#8216;Run&#8217; button is inactive.  It&#8217;s going to be pretty difficult to alter data in this environment.</p>
<p>Here&#8217;s how to do it quickly and easily &#8230;</p>
<p><span id="more-139"></span></p>
<h3>1. Create User Profile</h3>
<p>First, craft your perfect &#8216;read/write&#8217; user profile.  I&#8217;ll call this &#8216;DMD&#8217;.  Now clone it using the &#8216;Copy User Profile&#8217; functionality in the PIA.  This creates a new user profile (in my case &#8216;DMD_R&#8217;) with the same Roles, and this is the one we&#8217;re going to turn read-only.</p>
<h3>2. Create new Read-Only Permission Lists</h3>
<p>First create the Permission Lists by cloning those that are currently against the User Profile:</p>
<p><code><span style="font-size:9pt;line-height:80%;font-family:'Lucida Console';color:#7f7f7f;">INSERT INTO PSCLASSDEFN<br />
(CLASSID, VERSION, CLASSDEFNDESC, TIMEOUTMINUTES, DEFAULTBPM,<br />
 STARTAPPSERVER, ALLOWPSWDEMAIL, LASTUPDDTTM, LASTUPDOPRID)<br />
(SELECT CLASSID || '_R'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, VERSION<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, CLASSDEFNDESC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, TIMEOUTMINUTES<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, DEFAULTBPM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, STARTAPPSERVER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ALLOWPSWDEMAIL<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, SYSDATE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, 'DMD'<br />
&nbsp;&nbsp;&nbsp;FROM PSCLASSDEFN<br />
&nbsp;&nbsp;WHERE CLASSID IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT DISTINCT CLASSID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLECLASS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLENAME IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT ROLENAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLEUSER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLEUSER = 'DMD_R')))</span></code></p>
<p>Don&#8217;t forget to add the sign-on times:</p>
<p><code><span style="font-size:9pt;line-height:80%;font-family:'Lucida Console';color:#7f7f7f;">INSERT INTO PSAUTHSIGNON (CLASSID, DAYOFWEEK, STARTTIME, ENDTIME)<br />
SELECT CLASSID || '_R'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, DAYOFWEEK<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, STARTTIME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ENDTIME<br />
&nbsp;&nbsp;FROM PSAUTHSIGNON<br />
&nbsp;WHERE CLASSID IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT DISTINCT CLASSID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLECLASS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLENAME IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT ROLENAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLEUSER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLEUSER = 'DMD_R'))</p>
<h3>3. Make the Permission Lists Display Only</h3>
<p></span></code><br />
We add the pages to the new permission lists, but set Display Only to 1:</p>
<p><code><span style="font-size:9pt;line-height:80%;font-family:'Lucida Console';color:#7f7f7f;">INSERT INTO PSAUTHITEM (CLASSID, MENUNAME, BARNAME, BARITEMNAME, PNLITEMNAME, DISPLAYONLY, AUTHORIZEDACTIONS)<br />
(SELECT CLASSID || '_R'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, MENUNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, BARNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, BARITEMNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, PNLITEMNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, 1 DISPLAYONLY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, AUTHORIZEDACTIONS<br />
&nbsp;&nbsp;&nbsp;FROM PSAUTHITEM<br />
&nbsp;&nbsp;WHERE CLASSID IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT DISTINCT CLASSID<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLECLASS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLENAME IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT ROLENAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLEUSER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLEUSER = 'DMD_R')))</span></code></p>
<h3>4. Create the new Read-Only Roles</h3>
<p><code><span style="font-size:9pt;line-height:80%;font-family:'Lucida Console';color:#7f7f7f;">INSERT INTO PSROLEDEFN<br />
(ROLENAME, VERSION, ROLETYPE, DESCR, QRYNAME, ROLESTATUS, RECNAME, FIELDNAME, PC_EVENT_TYPE, QRYNAME_SEC, PC_FUNCTION_NAME, ROLE_PCODE_RULE_ON, ROLE_QUERY_RULE_ON, LDAP_RULE_ON, ALLOWNOTIFY, ALLOWLOOKUP, LASTUPDDTTM, LASTUPDOPRID, DESCRLONG)<br />
(SELECT SUBSTR(ROLENAME, 1,28) || '_R'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, VERSION<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ROLETYPE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, DESCR<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, QRYNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ROLESTATUS<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, RECNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, FIELDNAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, PC_EVENT_TYPE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, QRYNAME_SEC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, PC_FUNCTION_NAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ROLE_PCODE_RULE_ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ROLE_QUERY_RULE_ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, LDAP_RULE_ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ALLOWNOTIFY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, ALLOWLOOKUP<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, SYSDATE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, 'DMD'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, DESCRLONG<br />
&nbsp;&nbsp;&nbsp;FROM PSROLEDEFN<br />
&nbsp;&nbsp;WHERE ROLENAME IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT DISTINCT ROLENAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLEUSER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLEUSER = 'DMD_R'))</span></code></p>
<h3>5. Add the read only permission lists to the read only roles</h3>
<p><code><span style="font-size:9pt;line-height:80%;font-family:'Lucida Console';color:#7f7f7f;">INSERT INTO PSROLECLASS(ROLENAME, CLASSID)<br />
(SELECT SUBSTR(ROLENAME, 1,28) || '_R'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;, CLASSID || '_R'<br />
&nbsp;&nbsp;&nbsp;FROM PSROLECLASS<br />
&nbsp;&nbsp;WHERE ROLENAME IN (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT DISTINCT ROLENAME<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM PSROLEUSER<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE ROLEUSER = 'DMD_R'))</span></code></p>
<h3>6. Update the user profile with the new read only rolenames</h3>
<p><code><span style="font-size:9pt;line-height:80%;font-family:'Lucida Console';color:#7f7f7f;">UPDATE PSROLEUSER<br />
&nbsp;&nbsp;&nbsp;SET ROLENAME = SUBSTR(ROLENAME, 1,28) || '_R'<br />
&nbsp;WHERE ROLEUSER = 'DMD_R'</span></code></p>
<p>And that&#8217;s it, although you may well also need to perform the following:</p>
<ul>
<li>Run Portal Security Sync (to sync security up).</li>
<li>Bounce the App Server and clear cache (my App Server didn&#8217;t pick up the signon times from the cloned permission lists until I did this).</li>
<li>Run SJT_OPR_CLS (Refresh the Security Join Table that contains the Operator and Classid data)</li>
<li>Close and reopen your Web Browser and clear it&#8217;s local cache.</li>
</ul>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/duncandavies.wordpress.com/139/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/duncandavies.wordpress.com/139/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/duncandavies.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/duncandavies.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/duncandavies.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/duncandavies.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/duncandavies.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/duncandavies.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/duncandavies.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/duncandavies.wordpress.com/139/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/duncandavies.wordpress.com/139/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/duncandavies.wordpress.com/139/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peoplesofttipster.com&blog=893910&post=139&subd=duncandavies&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://peoplesofttipster.com/2008/08/28/creating-an-entirely-read-only-user-in-peoplesoft/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/42d38fff00428e8b120714d45980af8d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tipster</media:title>
		</media:content>

		<media:content url="http://duncandavies.files.wordpress.com/2008/08/read-only_job.jpg" medium="image" />
	</item>
	</channel>
</rss>