04. april 2008 - 02:56Der er
9 kommentarer og 1 løsning
Problem m. EXECUTE AS
Hej
Jeg vil gerne have lavet en SP der: - kreerer nyt brugerlogin paa min sql server.
Yderligere skal foelgende vaere opfyldt: 1) SP skal have rettighed til at indsaette nyt brugerlogin. 2) Bruger af SP skal IKKE have rettighed til at indsaette nyt brugerlogin, men have rettighed til at eksekvere SP.
Mit foerste bud var:
create PROC [dbo].[InsertUser] ( @UserFullName AS NVARCHAR(50), @UserLogin AS NVARCHAR(30), @UserPassword AS VARCHAR(30), @UserClientId AS INT) AS
DECLARE @createQuery AS NVARCHAR(500) DECLARE @defDB AS VARCHAR(50) SELECT @defDB = '[Sample]'
1) Opret nyt login = "test" med server role = "public", "sysadmin". 2) Opret ny user = "test" med database role = "db_owner" til login = "test". 3) Opret schema = "test" med ejer = "test". 4) Opret SP create PROC test.InsertUser AS create login delme WITH PASSWORD = 'test', DEFAULT_DATABASE = [dbname], CHECK_EXPIRATION = OFF 5) Login som "test" 6) eksekver InsertUser => eksekvering udfoert korrekt! 7) login som "brugerX" 8) eksekver InsertUser => User does not have permission to perform this action! 9) Slet SP og opret ny SP create PROC test.InsertUser AS select 1 10) login som "test" 11) eksekver InsertUser => eksekvering udfoert korrekt! 12) login som "brugerX" 13) eksekver InsertUser => eksekvering udfoert korrekt!
arne_v>> Det er lidt modsigende til det du skriver, er det ikke?
set @exec_stmt = 'create login ' + quotename(@loginame)
if @passwd is null select @passwd = ''
if (@encryptopt is null) set @exec_stmt = @exec_stmt + ' with password = ' + quotename(@passwd, '''') else begin declare @passwdbin varbinary(256) set @passwdbin = convert(varbinary(256), @passwd) execute sys.sp_hexadecimal @passwdbin, @hextext OUT set @exec_stmt = @exec_stmt + ' with password = ' + @hextext
if (@encryptopt = 'skip_encryption_old') set @exec_stmt = @exec_stmt + ' hashed ' else if (@encryptopt = 'skip_encryption') set @exec_stmt = @exec_stmt + ' hashed ' else begin raiserror(15600,-1,-1,'sys.sp_addlogin') return 1 end end
if (@defdb is not null) set @exec_stmt = @exec_stmt + ', default_database = ' + quotename(@defdb)
if (@deflanguage is not null) set @exec_stmt = @exec_stmt + ', default_language = ' + quotename(@deflanguage)
if (@sid is not null) begin execute sys.sp_hexadecimal @sid, @hextext OUT set @exec_stmt = @exec_stmt + ', sid = ' + @hextext end
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.