Script:
/**********************************************************************************************************
This script will create a stored procedure that displays all
tables, views, functions, and stored procedure (i.e. all securable user objects)
alongside which users and roles have explicit permissions on those objects,
plus what those permissions are.
By default, this will list all securables that have permissions assigned.
Parameters can be passed to this stored procedure to filter on what objects,
type of objects and permissions you're looking to list.
An interactive Reporting Services report to pass parameters and display the results of this stored proc
has also been provided as an .rdl file inside the .zip'ed file you downloaded from The Lytic Group.
You can add that report to any SSRS project in Visual Studio or that you can deploy
directly to a SQL Server Reporting Services server.
Please let us know your feedback on this script at
info@lyticgroupcom
***********************************************************************************************************/
/******************************************************************
Object: StoredProcedure [dbo].[uspListObjectPermissions]
Script Date: 06/18/2020
Origin: Edward Heraux, The Lytic Group (Brooklyn, USA)
******************************************************************/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[uspAllObjectPermissions] @ObjectType varchar(20)=NULL, @ObjectName sysname=NULL, @Permission varchar(20)=NULL, @PermissionState varchar(8)=NULL
AS
SELECT @ObjectType=ISNULL(@ObjectType,'%'),@ObjectName=ISNULL(@ObjectName,'%'),@Permission=ISNULL(@Permission,'%'),@PermissionState=ISNULL(@PermissionState,'%')
SELECT OB.Name AS ObjectName
,CASE OB.xtype
WHEN 'U' THEN 'Table'
WHEN 'P' THEN 'Stored Proc'
WHEN 'V' THEN 'View'
WHEN 'FN' THEN 'Function'
END AS ObjectType
,PE.class_desc AS DatabaseOrObject, PE.Major_id AS ObjectID
,PE.permission_name AS Permission, PE.state_desc AS PermissionState, PE.grantee_Principal_id AS PrincipalID
,PR.Name AS PrincipalName, PR.type_desc AS PrincipalType, PR.default_schema_name AS DefaultSchema
,PR.Modify_date AS DateModified
, CASE PR.is_fixed_role WHEN 0 THEN 'Not Fixed Role' WHEN 1 THEN 'Fixed Role' END AS FixedRole
--There are only 3 tables necessary to assemble all permissions on all objects and the principals to whom they were given
FROM Sys.database_permissions AS PE
INNER JOIN sys.sysobjects OB ON PE.Major_id=OB.id
INNER JOIN sys.database_principals AS PR ON PR.principal_id=PE.grantee_Principal_id
--Exclude system tables
WHERE OB.xtype <>'S'
AND CASE OB.xtype
WHEN 'U' THEN 'Table'
WHEN 'P' THEN 'Stored Proc'
WHEN 'V' THEN 'View'
WHEN 'FN' THEN 'Function'
END LIKE @ObjectType
AND OB.Name LIKE @ObjectName
AND PE.permission_name LIKE @Permission
AND PE.state_desc LIKE @PermissionState
ORDER BY ObjectName, PrincipalName
/********************************************************************************
*This table-valued function returns one row with info about the current server.
This is included strictly to feed a header in the report included in your download.
**********************************************************************************/
IF OBJECT_ID (N'dbo.ufnServerInfo', N'IF') IS NOT NULL
DROP FUNCTION dbo.ufnServerInfo
GO
ALTER FUNCTION dbo.ufnServerInfo()
/****************The Lytic Group, copyright, 2021*****************/
/****************Published June, 2020 *****************/
/*********from http://www.lyticgroup.com by Edward Heraux*****************/
RETURNS TABLE
AS
RETURN
--Grab server name and version info
SELECT SERVERPROPERTY('servername') AS ServerName
, @@Version as SQLServerVersion
, CONVERT(VARCHAR(100), serverproperty('Edition')) AS Edition
, SERVERPROPERTY('productversion')AS Version
, SERVERPROPERTY ('productlevel') AS ProductLevel
,CONVERT(VARCHAR(100), SERVERPROPERTY ('LicenseType')) AS LicenseType
GO
SELECT * FROM dbo.ufnServerInfo()