Quantcast
Channel: SCN: Message List - SAP Adaptive Server Enterprise (SAP ASE) for Custom Applications
Viewing all articles
Browse latest Browse all 3587

Re: Cross database permissions problems

$
0
0

A quick check to see if there's a role mismatch between the local/server roles:

 

==================

select  u.name as local_rolename, role_name(r.id) as server_rolename

from    sysusers u,

        sysroles r

where   u.uid            = r.lrid

and     role_name(r.id) != u.name

order by 1

==================


As for fixing any role mismatch issues ... *shrug* ... depends on your preferences ... drop/recreate roles (plus permissions) vs patch system tables.  I usually opt for the latter as it allows me to keep the current set of permissions, eg, a) can't always depend on having a master list of permissions in version control and b) can't always reverse engineer sysprotects into grant/revoke commands with 100% certainty.


==================

begin tran

go

 

declare @rowcount int, @error int

 

-- update sysroles.id when local/server roles match (by name)

-- but local role id does not match the server role id

 

update sysroles

set    id = role_id(u.name)

from   sysusers u,

       sysroles r

where  u.uid            = r.lrid

and    role_id(u.name) != r.id

and    role_id(u.name) is not NULL

 

select @rowcount = @@rowcount, @error = @@error

 

-- test @rowcount/@error; if issues then 'rollback tran' else 'commit tran'

... >>error_handling<<..


-- delete local role when no matching server role

 

-- delete sysusers entry while we still have sysusers.uid<-->sysroles.lrid relationship


delete sysusers

from   sysusers u,

       sysroles r

where  u.uid            = r.lrid

and    u.uid           != 1

and    role_name(r.id) is NULL

 

select @rowcount = @@rowcount, @error = @@error


-- test @rowcount/@error; if issues then 'rollback tran' else 'commit tran'

... >>error_handling<<..


-- now delete orphan sysroles entries


delete sysroles

where  role_name(id) is NULL


select @rowcount = @@rowcount, @error = @@error


-- test @rowcount/@error; if issues then 'rollback tran' else 'commit tran'

... >>error_handling<<..

 

go

==================


Viewing all articles
Browse latest Browse all 3587

Trending Articles