si se puede. aqui está el codigo
Código:
Begin
Declare @dsql varchar(500) = ''
Declare @Username varchar(20) = 'nombre_usuario'
Declare @password varchar(20) = 'clave'
Declare @DBName varchar(20) = 'base_datos'
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE [name] = @Username)
Begin
Set @dsql ='create login ' + @Username + ' with password = N'''+ REPLACE(@password, '''', '''''') + ''', DEFAULT_DATABASE=' + QUOTENAME(@DBName) + ', CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
execute (@dsql)
set @dsql = 'use master; GRANT CONNECT SQL TO ' + QUOTENAME(@Username)
execute( @dsql )
End
--Deshabilita la posibilidad de ver otra base de datos que no sea maste tempdb o la propia
Set @dsql = 'use master; deny VIEW any DATABASE to ' + @Username
--Print @dsql
execute (@dsql)
End
--Agrega el usuario como dbo a la base de datos
Set @dsql = @DBName + '.dbo.sp_changedbowner ' + @Username
--Print @dsql
execute (@dsql)
codigo esta probado y ya se utilizo en produccion.