Click here to monitor SSC
SQLServerCentral is supported by Red Gate Software Ltd.
 
Log in  ::  Register  ::  Not logged in
 
 
 
        
Home       Members    Calendar    Who's On


Add to briefcase

Copy Permissions for a database Expand / Collapse
Author
Message
Posted Saturday, September 29, 2007 7:18 AM


SSCommitted

SSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommitted

Group: General Forum Members
Last Login: Tuesday, May 29, 2012 11:22 AM
Points: 1,755, Visits: 4,652
Comments posted to this topic are about the item Copy Permissions for a database


Ryan Randall

Solutions are easy. Understanding the problem, now, that's the hard part.
Post #404394
Posted Thursday, September 4, 2008 12:53 PM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Friday, September 17, 2010 12:16 PM
Points: 2, Visits: 25
The function bo.f_lookup_system_id is not defined and the link http://www.sqlservercentral.com/columnists/awarren/sqlpermissionspublicrole_2.asp is no longer working.

Any suggestions on where I can find this function?:)

--Georgianne
Post #564099
Posted Tuesday, October 7, 2008 9:56 AM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Tuesday, September 23, 2014 10:43 AM
Points: 8, Visits: 219
I got the same thing, missing f_lookup_system_id.

Can I get that code?
Post #581951
Posted Tuesday, October 7, 2008 12:42 PM


SSCommitted

SSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommittedSSCommitted

Group: General Forum Members
Last Login: Tuesday, May 29, 2012 11:22 AM
Points: 1,755, Visits: 4,652
Gosh. This is a long time ago.

I'd forgotten all about this until I got an email from smorgan just now. And I can barely remember anything about it, so my starting point is not that much different from you guys.

I did quite a bit of digging but didn't find much which is directly useful.

I can't be sure, but I think this article might now be a link for the one referred to:
http://www.sqlservercentral.com/articles/Security/sqlpermissionspublicrole/116/

Given that, I think the f_lookup_system_id function probably looked something like this (this is a guess, but it should at least give the idea):

create function dbo.f_lookup_system_id(@name varchar(50), @id int) returns varchar(50) as
/*
select dbo.f_lookup_system_id('sysprotects_protecttype', 206)
select dbo.f_lookup_system_id('sysprotects_action', 197)
*/
begin
declare @s varchar(50)

if @name = 'sysprotects_protecttype'
select @s =
case @id
when 204 then 'GRANT_W_GRANT'
when 205 then 'GRANT'
when 206 then 'REVOKE'
end

if @name = 'sysprotects_action'
select @s =
case @id
when 26 then 'REFERENCES'
when 178 then 'CREATE FUNCTION'
when 193 then 'SELECT'
when 195 then 'INSERT'
when 196 then 'DELETE'
when 197 then 'UPDATE'
when 198 then 'CREATE TABLE'
when 203 then 'CREATE DATABASE'
when 207 then 'CREATE VIEW'
when 222 then 'CREATE PROCEDURE'
when 224 then 'EXECUTE'
when 228 then 'BACKUP DATABASE'
when 233 then 'CREATE DEFAULT'
when 235 then 'BACKUP LOG'
when 236 then 'CREATE RULE'
end

return @s
end

Sorry I can't be more helpful.

If you manage to get anything useful out of this, please let us know! :)



Ryan Randall

Solutions are easy. Understanding the problem, now, that's the hard part.
Post #582093
Posted Tuesday, October 7, 2008 2:38 PM
Forum Newbie

Forum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum NewbieForum Newbie

Group: General Forum Members
Last Login: Tuesday, September 23, 2014 10:43 AM
Points: 8, Visits: 219
Thanks! I may need to get back into that.

For now, I used some of your code in the previous article and modified it. I am trying to copy Roles (and some users) from one DB to another on the same server. Here's what I got to work for me (this is a SQL 2000 server):


---------------------------------------------------------------
-- COPY USERS & ROLES
-- from 1 db on this server to another db on this server
---------------------------------------------------------------
-----------------------
-- change all CA_AugME to "from" DataBase (OLD db)
-- change all CA_SeptME to "to" DataBase (NEW db)
--
-- If the user had no permissions to DB, this will copy that from the "from" db and
-- print a msg in grid 'ADDED USER ', @user_name
--
-- All Roles on the "from" db will be applied to the "to" db

-------------------------------------------------------
-- based on code from http://www.sqlservercentral.com/scripts/T-SQL+Aids/30754/
-------------------------------------------------------

-- Copy Roles
USE CA_SeptME

declare @s varchar(1000)
DECLARE c_from_user_roles CURSOR
READ_ONLY
FOR
select u.name as UserName, a_ROLE.name as RoleName --, *
from CA_AugME.dbo.sysusers as u
join CA_AugME.dbo.sysmembers AS Person
on u.uid = Person.memberuid
JOIN CA_AugME.dbo.sysusers AS a_ROLE
on a_ROLE.uid = groupuid
WHERE U.NAME + A_ROLE.NAME
NOT IN (SELECT U.NAME + A_ROLE.NAME
from CA_SeptME.dbo.sysusers as u
join CA_SeptME.dbo.sysmembers AS Person
on u.uid = Person.memberuid
JOIN CA_SeptME.dbo.sysusers AS a_ROLE
on a_ROLE.uid = groupuid)
-- AND U.NAME = 'jduffy' -- TEST only !

DECLARE @role_name varchar(40)
DECLARE @user_name varchar(40)
OPEN c_from_user_roles

FETCH NEXT FROM c_from_user_roles INTO @user_name, @role_name
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
BEGIN
if NOT exists (select * from CA_SeptME.dbo.sysusers where name = @user_name)
begin
exec sp_grantdbaccess @user_name -- add user to DB
-- print 'ADDED USER ' @user_name
SELECT 'ADDED USER ', @user_name
end
END
BEGIN
set @s = 'exec sp_addrolemember ''' + @role_name + ''', ''' + @user_name + ''''
print @s
exec(@s) -- copy Role for user
END
END
FETCH NEXT FROM c_from_user_roles INTO @user_name, @role_name
END

CLOSE c_from_user_roles
DEALLOCATE c_from_user_roles

Post #582190
Posted Thursday, April 16, 2009 4:27 PM
SSC Rookie

SSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC RookieSSC Rookie

Group: General Forum Members
Last Login: Thursday, October 18, 2012 11:17 AM
Points: 49, Visits: 97
works great with the function as was posted.

I just added double quotes on the line #92:

set @s = @protect_type_name + ' ' + @action_name + ' ON ' + @object_name + ' TO "' + @to_user + '"'

to support "DOMAIN\user" format.

thanks.
Roberto Figueroa.



Post #698993
« Prev Topic | Next Topic »

Add to briefcase

Permissions Expand / Collapse