Grant execute permission for a user on all stored procedures in database?

前端 未结 5 843
傲寒
傲寒 2020-12-07 14:40

I generated script from old database, created a new database and imported all data from old database. So far so good, however, no user has execute rights for stored procedur

相关标签:
5条回答
  • 2020-12-07 14:49

    This is a solution that means that as you add new stored procedures to the schema, users can execute them without having to call grant execute on the new stored procedure:

    IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'asp_net')
    DROP USER asp_net
    GO
    
    IF  EXISTS (SELECT * FROM sys.database_principals 
    WHERE name = N'db_execproc' AND type = 'R')
    DROP ROLE [db_execproc]
    GO
    
    --Create a database role....
    CREATE ROLE [db_execproc] AUTHORIZATION [dbo]
    GO
    
    --...with EXECUTE permission at the schema level...
    GRANT EXECUTE ON SCHEMA::dbo TO db_execproc;
    GO
    
    --http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html
    --Any stored procedures that are created in the dbo schema can be 
    --executed by users who are members of the db_execproc database role
    
    --...add a user e.g. for the NETWORK SERVICE login that asp.net uses
    CREATE USER asp_net 
    FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] 
    WITH DEFAULT_SCHEMA=[dbo]
    GO
    
    --...and add them to the roles you need
    EXEC sp_addrolemember N'db_execproc', 'asp_net';
    EXEC sp_addrolemember N'db_datareader', 'asp_net';
    EXEC sp_addrolemember N'db_datawriter', 'asp_net';
    GO
    

    Reference: Grant Execute Permission on All Stored Procedures

    0 讨论(0)
  • 2020-12-07 14:50

    Without over-complicating the problem, to grant the EXECUTE on chosen database:

    USE [DB]
    GRANT EXEC TO [User_Name];
    
    0 讨论(0)
  • 2020-12-07 14:58

    Create a role add this role to users, and then you can grant execute to all the routines in one shot to this role.

    CREATE ROLE <abc>
    GRANT EXECUTE TO <abc>
    

    EDIT
    This works in SQL Server 2005, I'm not sure about backward compatibility of this feature, I'm sure anything later than 2005 should be fine.

    0 讨论(0)
  • 2020-12-07 14:59
    USE [DATABASE]
    
    DECLARE @USERNAME VARCHAR(500)
    
    DECLARE @STRSQL NVARCHAR(MAX)
    
    SET @USERNAME='[USERNAME] '
    SET @STRSQL=''
    
    select @STRSQL+=CHAR(13)+'GRANT EXECUTE ON ['+ s.name+'].['+obj.name+'] TO'+@USERNAME+';'
    from
        sys.all_objects as obj
    inner join
        sys.schemas s ON obj.schema_id = s.schema_id
    where obj.type in ('P','V','FK')
    AND s.NAME NOT IN ('SYS','INFORMATION_SCHEMA')
    
    
    EXEC SP_EXECUTESQL @STRSQL
    
    0 讨论(0)
  • 2020-12-07 15:14

    use below code , change proper database name and user name and then take that output and execute in SSMS. FOR SQL 2005 ABOVE

    USE <database_name> 
    select 'GRANT EXECUTE ON ['+name+'] TO [userName]  '  
    from sys.objects  
    where type ='P' 
    and is_ms_shipped = 0  
    
    0 讨论(0)
提交回复
热议问题