-- !!! Important !!! -- Please goto line 76 / line 81 / line 431 / line 724, and make some necessary changes -- -- Configuration script for Data SBUs SQL Server 2005 servers -- -- -- Remember to first partition disks, create \MSSQL.1\MSSQL\Data directories -- -- Configuring system databases... USE master GO ALTER DATABASE master MODIFY FILE (NAME = master, SIZE = 128) GO ALTER DATABASE master MODIFY FILE (NAME = master, FILEGROWTH = 32) GO ALTER DATABASE master MODIFY FILE (NAME = mastlog, SIZE = 32) GO ALTER DATABASE master MODIFY FILE (NAME = mastlog, FILEGROWTH = 8) GO ALTER DATABASE model MODIFY FILE (NAME = modeldev, SIZE = 8) GO ALTER DATABASE model MODIFY FILE (NAME = modeldev, FILEGROWTH = 2) GO ALTER DATABASE model MODIFY FILE (NAME = modellog, SIZE = 8) GO ALTER DATABASE model MODIFY FILE (NAME = modellog, FILEGROWTH = 2) GO ALTER DATABASE model SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE GO ALTER DATABASE msdb MODIFY FILE (NAME = MSDBData, SIZE = 128) GO ALTER DATABASE msdb MODIFY FILE (NAME = MSDBData, FILEGROWTH = 32) GO ALTER DATABASE msdb MODIFY FILE (NAME = MSDBLog, SIZE = 32) GO ALTER DATABASE msdb MODIFY FILE (NAME = MSDBLog, FILEGROWTH = 8) GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'E:\MSSQL\MSSQL.1\Data\tempdb.mdf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, FILENAME = 'E:\MSSQL\MSSQL.1\Log\templog.ldf'); GO ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, SIZE = 1024, MAXSIZE = UNLIMITED, FILEGROWTH = 128) GO ALTER DATABASE tempdb MODIFY FILE (NAME = templog, SIZE = 256, MAXSIZE = UNLIMITED, FILEGROWTH = 32) GO -- -- Configure system access and maintenance -- -- Drop sample database(s) IF DB_ID('AdventureWorks') IS NOT NULL BEGIN DROP DATABASE AdventureWorks END IF DB_ID('AdventureWorksDW') IS NOT NULL BEGIN DROP DATABASE AdventureWorksDW END GO -- Role public_supplement definition CREATE ROLE public_supplement GO GRANT EXECUTE ON sys.sp_MSSQLDMO90_version TO public_supplement GRANT EXECUTE ON sys.sp_MSSQLDMO80_version TO public_supplement GRANT EXECUTE ON sys.sp_MSSQLDMO70_version TO public_supplement GRANT EXECUTE ON sys.sp_MSSQLOLE65_version TO public_supplement GRANT EXECUTE ON sys.sp_MSSQLOLE_version TO public_supplement GO GRANT EXECUTE ON sys.sp_help TO public_supplement GRANT EXECUTE ON sys.sp_help_fulltext_catalogs TO public_supplement GRANT EXECUTE ON sys.sp_help_fulltext_catalogs_cursor TO public_supplement GRANT EXECUTE ON sys.sp_help_fulltext_columns TO public_supplement GRANT EXECUTE ON sys.sp_help_fulltext_columns_cursor TO public_supplement GRANT EXECUTE ON sys.sp_help_fulltext_tables TO public_supplement GRANT EXECUTE ON sys.sp_help_fulltext_tables_cursor TO public_supplement GRANT EXECUTE ON sys.sp_help_publication_access TO public_supplement GRANT EXECUTE ON sys.sp_helparticle TO public_supplement GRANT EXECUTE ON sys.sp_helparticlecolumns TO public_supplement GRANT EXECUTE ON sys.sp_helpconstraint TO public_supplement GRANT EXECUTE ON sys.sp_helpdb TO public_supplement GRANT EXECUTE ON sys.sp_helpdbfixedrole TO public_supplement GRANT EXECUTE ON sys.sp_helpdevice TO public_supplement GRANT EXECUTE ON sys.sp_helpdistpublisher TO public_supplement GRANT EXECUTE ON sys.sp_helpdistributiondb TO public_supplement GRANT EXECUTE ON sys.sp_helpdistributor TO public_supplement GRANT EXECUTE ON sys.sp_helpextendedproc TO public_supplement GRANT EXECUTE ON sys.sp_helpfile TO public_supplement GRANT EXECUTE ON sys.sp_helpfilegroup TO public_supplement GRANT EXECUTE ON sys.sp_helpgroup TO public_supplement GRANT EXECUTE ON sys.sp_helpindex TO public_supplement GRANT EXECUTE ON sys.sp_helplanguage TO public_supplement GRANT EXECUTE ON sys.sp_helplinkedsrvlogin TO public_supplement GRANT EXECUTE ON sys.sp_helplogins TO public_supplement GRANT EXECUTE ON sys.sp_helpmergearticle TO public_supplement GRANT EXECUTE ON sys.sp_helpmergefilter TO public_supplement GRANT EXECUTE ON sys.sp_helpmergepublication TO public_supplement GRANT EXECUTE ON sys.sp_helpmergesubscription TO public_supplement GRANT EXECUTE ON sys.sp_helpntgroup TO public_supplement GRANT EXECUTE ON sys.sp_helppublication TO public_supplement GRANT EXECUTE ON sys.sp_helppullsubscription TO public_supplement GRANT EXECUTE ON sys.sp_helpremotelogin TO public_supplement GRANT EXECUTE ON sys.sp_helpreplicationdb TO public_supplement GRANT EXECUTE ON sys.sp_helpreplicationdboption TO public_supplement GRANT EXECUTE ON sys.sp_helpreplicationoption TO public_supplement GRANT EXECUTE ON sys.sp_helprole TO public_supplement GRANT EXECUTE ON sys.sp_helprolemember TO public_supplement GRANT EXECUTE ON sys.sp_helprotect TO public_supplement GRANT EXECUTE ON sys.sp_helpserver TO public_supplement GRANT EXECUTE ON sys.sp_helpsort TO public_supplement GRANT EXECUTE ON sys.sp_helpsrvrole TO public_supplement GRANT EXECUTE ON sys.sp_helpsrvrolemember TO public_supplement GRANT EXECUTE ON sys.sp_helpsubscriberinfo TO public_supplement GRANT EXECUTE ON sys.sp_helpsubscription TO public_supplement GRANT EXECUTE ON sys.sp_helpsubscription_properties TO public_supplement GRANT EXECUTE ON sys.sp_helptext TO public_supplement GRANT EXECUTE ON sys.sp_helptrigger TO public_supplement GRANT EXECUTE ON sys.sp_helpuser TO public_supplement GO GRANT SELECT ON sys.objects TO public_supplement GRANT SELECT ON sys.sysobjects TO public_supplement -- A view for the SQL 2000 system table GRANT SELECT ON sys.sql_modules TO public_supplement GRANT SELECT ON sys.syscomments TO public_supplement -- A view for the SQL 2000 system table GRANT SELECT ON sys.server_permissions TO public_supplement GO REVOKE EXECUTE ON sys.sp_MSSQLDMO90_version FROM public REVOKE EXECUTE ON sys.sp_MSSQLDMO80_version FROM public REVOKE EXECUTE ON sys.sp_MSSQLDMO70_version FROM public REVOKE EXECUTE ON sys.sp_MSSQLOLE65_version FROM public REVOKE EXECUTE ON sys.sp_MSSQLOLE_version FROM public GO REVOKE EXECUTE ON sys.sp_help FROM public REVOKE EXECUTE ON sys.sp_help_fulltext_catalogs FROM public REVOKE EXECUTE ON sys.sp_help_fulltext_catalogs_cursor FROM public REVOKE EXECUTE ON sys.sp_help_fulltext_columns FROM public REVOKE EXECUTE ON sys.sp_help_fulltext_columns_cursor FROM public REVOKE EXECUTE ON sys.sp_help_fulltext_tables FROM public REVOKE EXECUTE ON sys.sp_help_fulltext_tables_cursor FROM public REVOKE EXECUTE ON sys.sp_help_publication_access FROM public REVOKE EXECUTE ON sys.sp_helparticle FROM public REVOKE EXECUTE ON sys.sp_helparticlecolumns FROM public REVOKE EXECUTE ON sys.sp_helpconstraint FROM public REVOKE EXECUTE ON sys.sp_helpdb FROM public REVOKE EXECUTE ON sys.sp_helpdbfixedrole FROM public REVOKE EXECUTE ON sys.sp_helpdevice FROM public REVOKE EXECUTE ON sys.sp_helpdistpublisher FROM public REVOKE EXECUTE ON sys.sp_helpdistributiondb FROM public REVOKE EXECUTE ON sys.sp_helpdistributor FROM public REVOKE EXECUTE ON sys.sp_helpextendedproc FROM public REVOKE EXECUTE ON sys.sp_helpfile FROM public REVOKE EXECUTE ON sys.sp_helpfilegroup FROM public REVOKE EXECUTE ON sys.sp_helpgroup FROM public REVOKE EXECUTE ON sys.sp_helpindex FROM public REVOKE EXECUTE ON sys.sp_helplanguage FROM public REVOKE EXECUTE ON sys.sp_helplinkedsrvlogin FROM public REVOKE EXECUTE ON sys.sp_helplogins FROM public REVOKE EXECUTE ON sys.sp_helpmergearticle FROM public REVOKE EXECUTE ON sys.sp_helpmergefilter FROM public REVOKE EXECUTE ON sys.sp_helpmergepublication FROM public REVOKE EXECUTE ON sys.sp_helpmergesubscription FROM public REVOKE EXECUTE ON sys.sp_helpntgroup FROM public REVOKE EXECUTE ON sys.sp_helppublication FROM public REVOKE EXECUTE ON sys.sp_helppullsubscription FROM public REVOKE EXECUTE ON sys.sp_helpremotelogin FROM public REVOKE EXECUTE ON sys.sp_helpreplicationdb FROM public REVOKE EXECUTE ON sys.sp_helpreplicationdboption FROM public REVOKE EXECUTE ON sys.sp_helpreplicationoption FROM public REVOKE EXECUTE ON sys.sp_helprole FROM public REVOKE EXECUTE ON sys.sp_helprolemember FROM public REVOKE EXECUTE ON sys.sp_helprotect FROM public REVOKE EXECUTE ON sys.sp_helpserver FROM public REVOKE EXECUTE ON sys.sp_helpsort FROM public REVOKE EXECUTE ON sys.sp_helpsrvrole FROM public REVOKE EXECUTE ON sys.sp_helpsrvrolemember FROM public REVOKE EXECUTE ON sys.sp_helpsubscriberinfo FROM public REVOKE EXECUTE ON sys.sp_helpsubscription FROM public REVOKE EXECUTE ON sys.sp_helpsubscription_properties FROM public REVOKE EXECUTE ON sys.sp_helptext FROM public REVOKE EXECUTE ON sys.sp_helptrigger FROM public REVOKE EXECUTE ON sys.sp_helpuser FROM public REVOKE EXECUTE ON sys.xp_regread FROM public REVOKE EXECUTE ON sys.xp_instance_regread FROM public GO DENY SELECT ON sys.objects TO public DENY SELECT ON sys.sysobjects TO public -- A view for the SQL 2000 system table DENY SELECT ON sys.sql_modules TO public DENY SELECT ON sys.syscomments TO public -- A view for the SQL 2000 system table GO REVOKE SELECT ON sys.server_permissions FROM public GO CREATE ROLE rl_DBOwner CREATE ROLE rl_DBDeveloper CREATE ROLE rl_AppDeveloper GO EXEC sp_addrolemember 'rl_DBOwner', 'rl_DBDeveloper' EXEC sp_addrolemember 'rl_DBOwner', 'rl_AppDeveloper' GO GRANT EXECUTE ON sp_help TO rl_DBOwner GRANT EXECUTE ON sp_help_agent_default TO rl_DBOwner GRANT EXECUTE ON sp_help_agent_parameter TO rl_DBOwner GRANT EXECUTE ON sp_help_agent_profile TO rl_DBOwner GRANT EXECUTE ON sp_help_datatype_mapping TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_catalog_components TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_catalogs TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_catalogs_cursor TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_columns TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_columns_cursor TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_system_components TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_tables TO rl_DBOwner GRANT EXECUTE ON sp_help_fulltext_tables_cursor TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_alert_job TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_monitor TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_monitor_primary TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_monitor_secondary TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_primary_database TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_primary_secondary TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_secondary_database TO rl_DBOwner GRANT EXECUTE ON sp_help_log_shipping_secondary_primary TO rl_DBOwner GRANT EXECUTE ON sp_help_publication_access TO rl_DBOwner GRANT EXECUTE ON sp_helpallowmerge_publication TO rl_DBOwner GRANT EXECUTE ON sp_helparticle TO rl_DBOwner GRANT EXECUTE ON sp_helparticlecolumns TO rl_DBOwner GRANT EXECUTE ON sp_helparticledts TO rl_DBOwner GRANT EXECUTE ON sp_helpconstraint TO rl_DBOwner GRANT EXECUTE ON sp_helpdatatypemap TO rl_DBOwner GRANT EXECUTE ON sp_helpdb TO rl_DBOwner GRANT EXECUTE ON sp_helpdbfixedrole TO rl_DBOwner GRANT EXECUTE ON sp_helpdevice TO rl_DBOwner GRANT EXECUTE ON sp_helpdistpublisher TO rl_DBOwner GRANT EXECUTE ON sp_helpdistributiondb TO rl_DBOwner GRANT EXECUTE ON sp_helpdistributor TO rl_DBOwner GRANT EXECUTE ON sp_helpdistributor_properties TO rl_DBOwner GRANT EXECUTE ON sp_helpdynamicsnapshot_job TO rl_DBOwner GRANT EXECUTE ON sp_helpextendedproc TO rl_DBOwner GRANT EXECUTE ON sp_helpfile TO rl_DBOwner GRANT EXECUTE ON sp_helpfilegroup TO rl_DBOwner GRANT EXECUTE ON sp_helpgroup TO rl_DBOwner GRANT EXECUTE ON sp_helpindex TO rl_DBOwner GRANT EXECUTE ON sp_helplanguage TO rl_DBOwner GRANT EXECUTE ON sp_helplinkedsrvlogin TO rl_DBOwner GRANT EXECUTE ON sp_helplogins TO rl_DBOwner GRANT EXECUTE ON sp_helplogreader_agent TO rl_DBOwner GRANT EXECUTE ON sp_helpmergealternatepublisher TO rl_DBOwner GRANT EXECUTE ON sp_helpmergearticle TO rl_DBOwner GRANT EXECUTE ON sp_helpmergearticlecolumn TO rl_DBOwner GRANT EXECUTE ON sp_helpmergearticleconflicts TO rl_DBOwner GRANT EXECUTE ON sp_helpmergeconflictrows TO rl_DBOwner GRANT EXECUTE ON sp_helpmergedeleteconflictrows TO rl_DBOwner GRANT EXECUTE ON sp_helpmergefilter TO rl_DBOwner GRANT EXECUTE ON sp_helpmergelogfiles TO rl_DBOwner GRANT EXECUTE ON sp_helpmergelogfileswithdata TO rl_DBOwner GRANT EXECUTE ON sp_helpmergelogsettings TO rl_DBOwner GRANT EXECUTE ON sp_helpmergepartition TO rl_DBOwner GRANT EXECUTE ON sp_helpmergepublication TO rl_DBOwner GRANT EXECUTE ON sp_helpmergepullsubscription TO rl_DBOwner GRANT EXECUTE ON sp_helpmergesubscription TO rl_DBOwner GRANT EXECUTE ON sp_helpntgroup TO rl_DBOwner GRANT EXECUTE ON sp_helppeerrequests TO rl_DBOwner GRANT EXECUTE ON sp_helppeerresponses TO rl_DBOwner GRANT EXECUTE ON sp_helppublication TO rl_DBOwner GRANT EXECUTE ON sp_helppublication_snapshot TO rl_DBOwner GRANT EXECUTE ON sp_helppublicationsync TO rl_DBOwner GRANT EXECUTE ON sp_helppullsubscription TO rl_DBOwner GRANT EXECUTE ON sp_helpqreader_agent TO rl_DBOwner GRANT EXECUTE ON sp_helpremotelogin TO rl_DBOwner GRANT EXECUTE ON sp_helpreplfailovermode TO rl_DBOwner GRANT EXECUTE ON sp_helpreplicationdb TO rl_DBOwner GRANT EXECUTE ON sp_helpreplicationdboption TO rl_DBOwner GRANT EXECUTE ON sp_helpreplicationoption TO rl_DBOwner GRANT EXECUTE ON sp_helprole TO rl_DBOwner GRANT EXECUTE ON sp_helprolemember TO rl_DBOwner GRANT EXECUTE ON sp_helprotect TO rl_DBOwner GRANT EXECUTE ON sp_helpserver TO rl_DBOwner GRANT EXECUTE ON sp_helpsort TO rl_DBOwner GRANT EXECUTE ON sp_helpsrvrole TO rl_DBOwner GRANT EXECUTE ON sp_helpsrvrolemember TO rl_DBOwner GRANT EXECUTE ON sp_helpstats TO rl_DBOwner GRANT EXECUTE ON sp_helpsubscriberinfo TO rl_DBOwner GRANT EXECUTE ON sp_helpsubscription TO rl_DBOwner GRANT EXECUTE ON sp_helpsubscription_properties TO rl_DBOwner GRANT EXECUTE ON sp_helpsubscriptionerrors TO rl_DBOwner GRANT EXECUTE ON sp_helptext TO rl_DBOwner GRANT EXECUTE ON sp_helptracertokenhistory TO rl_DBOwner GRANT EXECUTE ON sp_helptracertokens TO rl_DBOwner GRANT EXECUTE ON sp_helptrigger TO rl_DBOwner GRANT EXECUTE ON sp_helpuser TO rl_DBOwner GRANT EXECUTE ON sp_helpxactsetjob TO rl_DBOwner GO -- Create logins CREATE LOGIN DMClient WITH PASSWORD = '2Fetch(Get' CREATE LOGIN DMEditor WITH PASSWORD = 'acct4Mods#' GO -- model USE model GO -- Default users for each database CREATE USER DMClient FOR LOGIN DMClient WITH DEFAULT_SCHEMA = dbo CREATE USER DMEditor FOR LOGIN DMEditor WITH DEFAULT_SCHEMA = dbo GO -- Default roles for each database CREATE ROLE public_supplement CREATE ROLE rl_DBDeveloper CREATE ROLE rl_DataReader CREATE ROLE rl_DataWriter CREATE ROLE rl_DataDownload CREATE ROLE rl_DataUpload CREATE ROLE rl_DBOwner CREATE ROLE rl_AppDeveloper GO -- This role will be for programmers who need to read, write, create -- stored procedures and grant permissions on stored procedures EXEC sp_addrolemember 'db_owner', 'rl_DBOwner' EXEC sp_addrolemember 'db_datareader', 'rl_DataReader' EXEC sp_addrolemember 'db_datawriter', 'rl_DataWriter' EXEC sp_addrolemember 'db_datareader', 'rl_DBDeveloper' EXEC sp_addrolemember 'db_datawriter', 'rl_DBDeveloper' EXEC sp_addrolemember 'rl_DataDownload', 'DMClient' EXEC sp_addrolemember 'rl_DataUpload', 'DMEditor' EXEC sp_addrolemember 'rl_DataReader', 'rl_AppDeveloper' EXEC sp_addrolemember 'rl_DataWriter', 'rl_AppDeveloper' GO -- GRANT CREATE DEFAULT TO rl_DBDeveloper GRANT CREATE FUNCTION TO rl_DBDeveloper GRANT CREATE PROCEDURE TO rl_DBDeveloper GRANT CREATE RULE TO rl_DBDeveloper GRANT CREATE TABLE TO rl_DBDeveloper GRANT CREATE VIEW TO rl_DBDeveloper GO GRANT CONTROL ON SCHEMA::dbo TO rl_DBDeveloper GRANT VIEW DEFINITION ON SCHEMA::dbo TO rl_AppDeveloper GO DENY BACKUP DATABASE TO rl_DBDeveloper DENY BACKUP LOG TO rl_DBDeveloper GO -- DENY CREATE DEFAULT TO rl_DataReader DENY CREATE FUNCTION TO rl_DataReader DENY CREATE PROCEDURE TO rl_DataReader DENY CREATE RULE TO rl_DataReader DENY CREATE TABLE TO rl_DataReader DENY CREATE VIEW TO rl_DataReader DENY BACKUP DATABASE TO rl_DataReader DENY BACKUP LOG TO rl_DataReader GO -- DENY CREATE DEFAULT TO rl_DataWriter DENY CREATE FUNCTION TO rl_DataWriter DENY CREATE PROCEDURE TO rl_DataWriter DENY CREATE RULE TO rl_DataWriter DENY CREATE TABLE TO rl_DataWriter DENY CREATE VIEW TO rl_DataWriter DENY BACKUP DATABASE TO rl_DataWriter DENY BACKUP LOG TO rl_DataWriter GO -- Grant rights to public_supplement on the SQL 2000 Compatibility Views GRANT SELECT ON sys.syscolumns TO public_supplement GRANT SELECT ON sys.syscomments TO public_supplement GRANT SELECT ON sys.sysdepends TO public_supplement GRANT SELECT ON sys.sysfilegroups TO public_supplement GRANT SELECT ON sys.sysfiles TO public_supplement GRANT SELECT ON sys.sysforeignkeys TO public_supplement GRANT SELECT ON sys.sysfulltextcatalogs TO public_supplement GRANT SELECT ON sys.sysindexes TO public_supplement GRANT SELECT ON sys.sysindexkeys TO public_supplement GRANT SELECT ON sys.sysmembers TO public_supplement GRANT SELECT ON sys.sysobjects TO public_supplement GRANT SELECT ON sys.syspermissions TO public_supplement GRANT SELECT ON sys.sysprotects TO public_supplement GRANT SELECT ON sys.sysreferences TO public_supplement GRANT SELECT ON sys.systypes TO public_supplement GRANT SELECT ON sys.sysusers TO public_supplement -- Grant rights to public_supplement on the SQL 2005 system views (Catalog Views) GRANT SELECT ON sys.columns TO public_supplement GRANT SELECT ON sys.sql_modules TO public_supplement GRANT SELECT ON sys.sql_dependencies TO public_supplement GRANT SELECT ON sys.filegroups TO public_supplement GRANT SELECT ON sys.database_files TO public_supplement GRANT SELECT ON sys.foreign_keys TO public_supplement GRANT SELECT ON sys.fulltext_catalogs TO public_supplement GRANT SELECT ON sys.indexes TO public_supplement GRANT SELECT ON sys.index_columns TO public_supplement GRANT SELECT ON sys.database_role_members TO public_supplement GRANT SELECT ON sys.objects TO public_supplement GRANT SELECT ON sys.database_permissions TO public_supplement GRANT SELECT ON sys.foreign_keys TO public_supplement GRANT SELECT ON sys.types TO public_supplement GRANT SELECT ON sys.database_principals TO public_supplement GO -- Revoke rights from public on the SQL 2000 Compatibility Views REVOKE SELECT ON sys.syscolumns FROM public REVOKE SELECT ON sys.syscomments FROM public REVOKE SELECT ON sys.sysdepends FROM public REVOKE SELECT ON sys.sysfilegroups FROM public REVOKE SELECT ON sys.sysfiles FROM public REVOKE SELECT ON sys.sysforeignkeys FROM public REVOKE SELECT ON sys.sysfulltextcatalogs FROM public REVOKE SELECT ON sys.sysindexes FROM public REVOKE SELECT ON sys.sysindexkeys FROM public REVOKE SELECT ON sys.sysmembers FROM public REVOKE SELECT ON sys.sysobjects FROM public REVOKE SELECT ON sys.syspermissions FROM public REVOKE SELECT ON sys.sysprotects FROM public REVOKE SELECT ON sys.sysreferences FROM public REVOKE SELECT ON sys.systypes FROM public REVOKE SELECT ON sys.sysusers FROM public GO -- Revoke rights from public on the SQL 2005 system views (Catalog Views) REVOKE SELECT ON sys.columns FROM public REVOKE SELECT ON sys.sql_modules FROM public REVOKE SELECT ON sys.sql_dependencies FROM public REVOKE SELECT ON sys.filegroups FROM public REVOKE SELECT ON sys.database_files FROM public REVOKE SELECT ON sys.foreign_keys FROM public REVOKE SELECT ON sys.fulltext_catalogs FROM public REVOKE SELECT ON sys.indexes FROM public REVOKE SELECT ON sys.index_columns FROM public REVOKE SELECT ON sys.database_role_members FROM public REVOKE SELECT ON sys.objects FROM public REVOKE SELECT ON sys.database_permissions FROM public REVOKE SELECT ON sys.foreign_keys FROM public REVOKE SELECT ON sys.types FROM public REVOKE SELECT ON sys.database_principals FROM public GO -- DENY rights to rl_DataReader on the SQL 2000 system views GRANT SELECT ON sys.syscolumns TO rl_DataReader GRANT SELECT ON sys.syscomments TO rl_DataReader GRANT SELECT ON sys.sysindexes TO rl_DataReader GRANT SELECT ON sys.sysobjects TO rl_DataReader GRANT SELECT ON sys.sysindexkeys TO rl_DataReader GRANT SELECT ON sys.systypes TO rl_DataReader DENY SELECT ON sys.sysdepends TO rl_DataReader DENY SELECT ON sys.sysfilegroups TO rl_DataReader DENY SELECT ON sys.sysfiles TO rl_DataReader DENY SELECT ON sys.sysforeignkeys TO rl_DataReader DENY SELECT ON sys.sysfulltextcatalogs TO rl_DataReader DENY SELECT ON sys.sysmembers TO rl_DataReader DENY SELECT ON sys.syspermissions TO rl_DataReader DENY SELECT ON sys.sysprotects TO rl_DataReader DENY SELECT ON sys.sysreferences TO rl_DataReader DENY SELECT ON sys.sysusers TO rl_DataReader -- DENY rights to rl_DataReader on the SQL 2005 system views (Catalog Views) GRANT SELECT ON sys.sql_modules TO rl_DataReader GRANT SELECT ON sys.columns TO rl_DataReader GRANT SELECT ON sys.indexes TO rl_DataReader GRANT SELECT ON sys.objects TO rl_DataReader GRANT SELECT ON sys.index_columns TO rl_DataReader GRANT SELECT ON sys.types TO rl_DataReader DENY SELECT ON sys.sql_dependencies TO rl_DataReader DENY SELECT ON sys.filegroups TO rl_DataReader DENY SELECT ON sys.database_files TO rl_DataReader DENY SELECT ON sys.foreign_keys TO rl_DataReader DENY SELECT ON sys.fulltext_catalogs TO rl_DataReader DENY SELECT ON sys.database_role_members TO rl_DataReader DENY SELECT ON sys.database_permissions TO rl_DataReader DENY SELECT ON sys.foreign_keys TO rl_DataReader DENY SELECT ON sys.database_principals TO rl_DataReader -- DENY rights to rl_DataWriter on the SQL 2000 system views GRANT SELECT ON sys.syscolumns TO rl_DataWriter GRANT SELECT ON sys.syscomments TO rl_DataWriter GRANT SELECT ON sys.sysindexes TO rl_DataWriter GRANT SELECT ON sys.sysobjects TO rl_DataWriter GRANT SELECT ON sys.sysindexkeys TO rl_DataWriter GRANT SELECT ON sys.systypes TO rl_DataWriter DENY SELECT ON sys.sysdepends TO rl_DataWriter DENY SELECT ON sys.sysfilegroups TO rl_DataWriter DENY SELECT ON sys.sysfiles TO rl_DataWriter DENY SELECT ON sys.sysforeignkeys TO rl_DataWriter DENY SELECT ON sys.sysfulltextcatalogs TO rl_DataWriter DENY SELECT ON sys.sysmembers TO rl_DataWriter DENY SELECT ON sys.syspermissions TO rl_DataWriter DENY SELECT ON sys.sysprotects TO rl_DataWriter DENY SELECT ON sys.sysreferences TO rl_DataWriter DENY SELECT ON sys.sysusers TO rl_DataWriter -- DENY rights to rl_DataWriter on the SQL 2005 system views (Catalog Views) GRANT SELECT ON sys.sql_modules TO rl_DataWriter GRANT SELECT ON sys.columns TO rl_DataWriter GRANT SELECT ON sys.indexes TO rl_DataWriter GRANT SELECT ON sys.objects TO rl_DataWriter GRANT SELECT ON sys.index_columns TO rl_DataWriter GRANT SELECT ON sys.types TO rl_DataWriter DENY SELECT ON sys.sql_dependencies TO rl_DataWriter DENY SELECT ON sys.filegroups TO rl_DataWriter DENY SELECT ON sys.database_files TO rl_DataWriter DENY SELECT ON sys.foreign_keys TO rl_DataWriter DENY SELECT ON sys.fulltext_catalogs TO rl_DataWriter DENY SELECT ON sys.database_role_members TO rl_DataWriter DENY SELECT ON sys.database_permissions TO rl_DataWriter DENY SELECT ON sys.foreign_keys TO rl_DataWriter DENY SELECT ON sys.database_principals TO rl_DataWriter GO -- DENY rights to rl_DataDownload on the SQL 2000 system views DENY SELECT ON sys.syscolumns TO rl_DataDownload DENY SELECT ON sys.syscomments TO rl_DataDownload DENY SELECT ON sys.sysdepends TO rl_DataDownload DENY SELECT ON sys.sysfilegroups TO rl_DataDownload DENY SELECT ON sys.sysfiles TO rl_DataDownload DENY SELECT ON sys.sysforeignkeys TO rl_DataDownload DENY SELECT ON sys.sysfulltextcatalogs TO rl_DataDownload DENY SELECT ON sys.sysindexes TO rl_DataDownload DENY SELECT ON sys.sysindexkeys TO rl_DataDownload DENY SELECT ON sys.sysmembers TO rl_DataDownload DENY SELECT ON sys.sysobjects TO rl_DataDownload DENY SELECT ON sys.syspermissions TO rl_DataDownload DENY SELECT ON sys.sysprotects TO rl_DataDownload DENY SELECT ON sys.sysreferences TO rl_DataDownload DENY SELECT ON sys.systypes TO rl_DataDownload DENY SELECT ON sys.sysusers TO rl_DataDownload -- DENY rights to rl_DataDownload on the SQL 2005 system views (Catalog Views) DENY SELECT ON sys.columns TO rl_DataDownload DENY SELECT ON sys.sql_modules TO rl_DataDownload DENY SELECT ON sys.sql_dependencies TO rl_DataDownload DENY SELECT ON sys.filegroups TO rl_DataDownload DENY SELECT ON sys.database_files TO rl_DataDownload DENY SELECT ON sys.foreign_keys TO rl_DataDownload DENY SELECT ON sys.fulltext_catalogs TO rl_DataDownload DENY SELECT ON sys.indexes TO rl_DataDownload DENY SELECT ON sys.index_columns TO rl_DataDownload DENY SELECT ON sys.database_role_members TO rl_DataDownload DENY SELECT ON sys.objects TO rl_DataDownload DENY SELECT ON sys.database_permissions TO rl_DataDownload DENY SELECT ON sys.foreign_keys TO rl_DataDownload DENY SELECT ON sys.types TO rl_DataDownload DENY SELECT ON sys.database_principals TO rl_DataDownload GO -- DENY rights to rl_DataUpload on the SQL 2000 system views DENY SELECT ON sys.syscolumns TO rl_DataUpload DENY SELECT ON sys.syscomments TO rl_DataUpload DENY SELECT ON sys.sysdepends TO rl_DataUpload DENY SELECT ON sys.sysfilegroups TO rl_DataUpload DENY SELECT ON sys.sysfiles TO rl_DataUpload DENY SELECT ON sys.sysforeignkeys TO rl_DataUpload DENY SELECT ON sys.sysfulltextcatalogs TO rl_DataUpload DENY SELECT ON sys.sysindexes TO rl_DataUpload DENY SELECT ON sys.sysindexkeys TO rl_DataUpload DENY SELECT ON sys.sysmembers TO rl_DataUpload DENY SELECT ON sys.sysobjects TO rl_DataUpload DENY SELECT ON sys.syspermissions TO rl_DataUpload DENY SELECT ON sys.sysprotects TO rl_DataUpload DENY SELECT ON sys.sysreferences TO rl_DataUpload DENY SELECT ON sys.systypes TO rl_DataUpload DENY SELECT ON sys.sysusers TO rl_DataUpload -- DENY rights to rl_DataUpload on the SQL 2005 system views (Catalog Views) DENY SELECT ON sys.columns TO rl_DataUpload DENY SELECT ON sys.sql_modules TO rl_DataUpload DENY SELECT ON sys.sql_dependencies TO rl_DataUpload DENY SELECT ON sys.filegroups TO rl_DataUpload DENY SELECT ON sys.database_files TO rl_DataUpload DENY SELECT ON sys.foreign_keys TO rl_DataUpload DENY SELECT ON sys.fulltext_catalogs TO rl_DataUpload DENY SELECT ON sys.indexes TO rl_DataUpload DENY SELECT ON sys.index_columns TO rl_DataUpload DENY SELECT ON sys.database_role_members TO rl_DataUpload DENY SELECT ON sys.objects TO rl_DataUpload DENY SELECT ON sys.database_permissions TO rl_DataUpload DENY SELECT ON sys.foreign_keys TO rl_DataUpload DENY SELECT ON sys.types TO rl_DataUpload DENY SELECT ON sys.database_principals TO rl_DataUpload GO -- -- security policy -- -- Revoke guest access to msdb in order to keep any non system administrators from accessing -- the database without explicit permissions. USE msdb GO REVOKE CONNECT FROM guest GO -- Add DBA to the sysadmin group USE master GO CREATE LOGIN [MSDOMAIN1\mxu1] FROM WINDOWS WITH DEFAULT_DATABASE = [tempdb] CREATE LOGIN [MSDOMAIN1\ywang] FROM WINDOWS WITH DEFAULT_DATABASE = [tempdb] GO EXEC master.dbo.sp_addsrvrolemember @loginame = N'MSDOMAIN1\azhou', @rolename = N'sysadmin' EXEC master.dbo.sp_addsrvrolemember @loginame = N'MSDOMAIN1\ywang', @rolename = N'sysadmin' GO -- NutsAndBolts.sql USE master GO CREATE DATABASE NutsAndBolts ON PRIMARY ( NAME = NutsAndBolts_PData, FILENAME = "E:\MSSQL\MSSQL.1\Data\NutsAndBolts_Primary.mdf", SIZE = 64, MAXSIZE = UNLIMITED, FILEGROWTH = 32 ), FILEGROUP NutsAndBolts_Data ( NAME = NutsAndBolts_Data1, FILENAME = "E:\MSSQL\MSSQL.1\Data\NutsAndBolts_Data1.ndf", SIZE = 128, MAXSIZE = UNLIMITED, FILEGROWTH = 64 ), ( NAME = NutsAndBolts_Data2, FILENAME = "E:\MSSQL\MSSQL.1\Data\NutsAndBolts_Data2.ndf", SIZE = 128, MAXSIZE = UNLIMITED, FILEGROWTH = 64 ), FILEGROUP NutsAndBolts_Index ( NAME = NutsAndBolts_Index1, FILENAME = "E:\MSSQL\MSSQL.1\Data\NutsAndBolts_Index1.ndf", SIZE = 32, MAXSIZE = UNLIMITED, FILEGROWTH = 32 ), ( NAME = NutsAndBolts_Index2, FILENAME = "E:\MSSQL\MSSQL.1\Data\NutsAndBolts_Index2.ndf", SIZE = 32, MAXSIZE = UNLIMITED, FILEGROWTH = 32 ) LOG ON ( NAME = NutsAndBolts_Log, FILENAME = "E:\MSSQL\MSSQL.1\Log\NutsAndBolts_Log.ldf", SIZE = 128, MAXSIZE = UNLIMITED, FILEGROWTH = 64 ) GO ALTER DATABASE NutsAndBolts SET RECOVERY SIMPLE GO ALTER DATABASE NutsAndBolts SET DB_CHAINING ON GO USE NutsAndBolts GO EXECUTE sp_changedbowner 'sa' GO GRANT CONNECT TO guest GO IF OBJECT_ID('dbo.ErrorLog', 'U') IS NOT NULL DROP TABLE dbo.ErrorLog GO -- -- Name: ErrorLog (Table) -- Purpose: Store user defined error message and/or system error message -- Location: At NutsAndBolts Database -- Authorized to: None -- Last Update : -- Author: -- Create date: 08/23/99 -- -- Revisions: -- CREATE TABLE dbo.ErrorLog ( Time DATETIME NOT NULL, Err INT NOT NULL, Msg VARCHAR(500) NOT NULL, Id VARCHAR(50) NOT NULL, DBName VARCHAR(30) NOT NULL, ProcName VARCHAR(50) NOT NULL, DBUser VARCHAR(20) NOT NULL, HostName VARCHAR(20) NOT NULL, Application VARCHAR(30) NOT NULL, Checked BIT NOT NULL ) ON NutsAndBolts_Data GO -- Default constraint(s) definition ALTER TABLE dbo.ErrorLog ADD CONSTRAINT DF_ErrorLog_Time DEFAULT GETDATE() FOR Time GO ALTER TABLE dbo.ErrorLog ADD CONSTRAINT DF_ErrorLog_DBName DEFAULT LEFT(DB_NAME(), 30) FOR DBName GO ALTER TABLE dbo.ErrorLog ADD CONSTRAINT DF_ErrorLog_DBUser DEFAULT LEFT(SUSER_SNAME(), 20) FOR DBUser GO ALTER TABLE dbo.ErrorLog ADD CONSTRAINT DF_ErrorLog_HostName DEFAULT LEFT(HOST_NAME(), 20) FOR HostName GO ALTER TABLE dbo.ErrorLog ADD CONSTRAINT DF_ErrorLog_Application DEFAULT LEFT(RTRIM(LTRIM(APP_NAME())), 30) FOR Application GO ALTER TABLE dbo.ErrorLog ADD CONSTRAINT DF_ErrorLog_Checked DEFAULT 0 FOR Checked GO GRANT SELECT ON dbo.ErrorLog TO public GO IF OBJECT_ID('dbo.EventLog', 'U') IS NOT NULL DROP TABLE dbo.EventLog GO -- -- Name: EventLog (Table) -- Purpose: -- Location: NutsAndBolts -- Authorized to: None -- Last Update : -- Author: Michael .H -- Create date: 2008-03-03 -- -- Revisions: -- CREATE TABLE dbo.EventLog ( Id INT IDENTITY(1, 1) NOT NULL, EventData XML NOT NULL ) ON NutsAndBolts_Data GO ALTER TABLE dbo.EventLog ADD CONSTRAINT PK_EventLog PRIMARY KEY CLUSTERED ( Id ASC ) ON NutsAndBolts_Data GO CREATE PRIMARY XML INDEX XI_EventLog_EventData ON dbo.EventLog ( EventData ) GO CREATE XML INDEX XI_EventLog_EventData_Path ON dbo.EventLog ( EventData ) USING XML INDEX XI_EventLog_EventData FOR PATH GO CREATE XML INDEX XI_EventLog_EventData_Value ON dbo.EventLog ( EventData ) USING XML INDEX XI_EventLog_EventData FOR VALUE GO GRANT SELECT ON dbo.EventLog TO public GO USE NutsAndBolts GO IF OBJECT_ID('dbo.ProcUsage', 'U') IS NOT NULL DROP TABLE dbo.ProcUsage GO CREATE TABLE dbo.ProcUsage ( TrackType TINYINT, DBName VARCHAR(30) NOT NULL, ProcName VARCHAR(50) NOT NULL, Id VARCHAR(15) NULL, LastAccess DATETIME NOT NULL, AccessCount INT NOT NULL, DBUser VARCHAR(20) NOT NULL, HostName VARCHAR(20) NOT NULL, AppName VARCHAR(50) NOT NULL, Checked BIT NOT NULL ) ON NutsAndBolts_Data GO -- Default constraint(s) definition ALTER TABLE dbo.ProcUsage ADD CONSTRAINT DF_ProcUsage_LastAccess DEFAULT GETDATE() FOR LastAccess GO ALTER TABLE dbo.ProcUsage ADD CONSTRAINT DF_ProcUsage_AccessCount DEFAULT 1 FOR AccessCount GO ALTER TABLE dbo.ProcUsage ADD CONSTRAINT DF_ProcUsage_DBUser DEFAULT LEFT(RTRIM(LTRIM(SUSER_SNAME())), 20) FOR DBUser GO ALTER TABLE dbo.ProcUsage ADD CONSTRAINT DF_ProcUsage_HostName DEFAULT LEFT(RTRIM(LTRIM(HOST_NAME())), 20) FOR HostName GO ALTER TABLE dbo.ProcUsage ADD CONSTRAINT DF_ProcUsage_AppName DEFAULT LEFT(RTRIM(LTRIM(APP_NAME())), 30) FOR AppName GO ALTER TABLE dbo.ProcUsage ADD CONSTRAINT DF_ProcUsage_Checked DEFAULT 0 FOR Checked GO CREATE NONCLUSTERED INDEX IX_ProcUsage_DBName_ProcName_Time ON ProcUsage ( TrackType, DBName, ProcName, LastAccess ) ON NutsAndBolts_Data GO IF OBJECT_ID('dbo.AvailableDiskSpace', 'U') IS NOT NULL DROP TABLE dbo.AvailableDiskSpace GO CREATE TABLE dbo.AvailableDiskSpace ( Id INT IDENTITY (1, 1) NOT NULL, LastUpdate SMALLDATETIME NOT NULL, DriveLetter CHAR(1) NOT NULL, FreeMB INT NOT NULL, ) ON NutsAndBolts_Data GO ALTER TABLE dbo.AvailableDiskSpace ADD CONSTRAINT DF_AvailableDiskSpace_LastUpdate DEFAULT GETDATE() FOR LastUpdate GO ALTER TABLE dbo.AvailableDiskSpace ADD CONSTRAINT PK_AvailableDiskSpace PRIMARY KEY ( Id ) ON NutsAndBolts_Data GO -- This stored procedure captures the amount of free space on each disk -- on the server. Results are stored in NutsAndBolts.dbo.AvailableDiskSpace. -- -- A SQLAgent job should be created to execute this procedure on a regular basis -- PRINT 'Create procedures...' GO IF OBJECT_ID('dbo.getAvailableDiskSpace', 'P') IS NOT NULL DROP PROCEDURE dbo.getAvailableDiskSpace GO -- Procedure: getAvailableDiskSpace -- Purpose: Get available disk space -- Location: NutsAndBolts -- Authorized to: -- Last Update: -- Parameter: -- Input -- None -- Output -- None -- -- Result Set: -- None -- -- Return: @@ERROR -- Exception return values: None -- -- Author: John Panfil -- Create Date: 11/18/2004 -- Revisions: -- CREATE PROCEDURE dbo.getAvailableDiskSpace AS SET NOCOUNT ON DECLARE @l_DiskFreeSpace INT, @l_FreeSpaceThreshhold INT, @l_DriveLetter CHAR(1), @l_AlertMessage VARCHAR(200), @l_MailSubject VARCHAR(100), @l_Recipients VARCHAR(100) /* If free space is less than this (in MB), alert somebody */ SET @l_FreeSpaceThreshhold = 1024 SET @l_AlertMessage = NULL SET @l_Recipients = '[email protected]' /* Create a temp table to hold disk space information */ CREATE TABLE #disk_free_space ( DriveLetter CHAR(1) NOT NULL, FreeMB INT NOT NULL ) INSERT INTO #disk_free_space EXEC master.dbo.xp_fixeddrives /* Save results for trend analysis */ INSERT INTO dbo.AvailableDiskSpace (DriveLetter, FreeMB) SELECT DriveLetter, FreeMB FROM #disk_free_space /* Examine free space of each drive and send email for those that are with low */ DECLARE cur_DriveSpace CURSOR FAST_FORWARD FOR SELECT DriveLetter, FreeMB FROM #disk_free_space OPEN cur_DriveSpace FETCH NEXT FROM cur_DriveSpace INTO @l_DriveLetter, @l_DiskFreeSpace /* Examine free space of each drive */ /* Build text of email for each drive that is low */ WHILE (@@FETCH_STATUS = 0) BEGIN IF @l_DiskFreeSpace < @l_FreeSpaceThreshhold BEGIN IF @l_AlertMessage IS NULL BEGIN SET @l_AlertMessage = @l_DriveLetter + ' has ' + CAST(@l_DiskFreeSpace AS VARCHAR) + ' MB free.' END ELSE BEGIN SET @l_AlertMessage = @l_AlertMessage + CHAR(13) + @l_DriveLetter + ' has ' + CAST(@l_DiskFreeSpace AS VARCHAR) + ' MB free.' END END FETCH NEXT FROM cur_DriveSpace INTO @l_DriveLetter, @l_DiskFreeSpace END CLOSE cur_DriveSpace DEALLOCATE cur_DriveSpace DROP TABLE #disk_free_space -- Send out email IF @l_AlertMessage IS NOT NULL BEGIN SET @l_MailSubject = 'Free disk space is low on ' + @@SERVERNAME EXECUTE msdb.dbo.sp_send_dbmail @recipients = @l_Recipients, @subject = @l_MailSubject, @body = @l_AlertMessage END GO IF OBJECT_ID('dbo.getAvailableDiskSpaceTrend', 'P') IS NOT NULL DROP PROCEDURE dbo.getAvailableDiskSpaceTrend GO -- Procedure: getAvailableDiskSpaceTrend -- Purpose: Get available disk space -- Location: NutsAndBolts -- Authorized to: SQLAgent -- Last Update: -- Parameter: -- Input -- 1. p_StartDate SMALLDATETIME - Beginning date -- Default is 2 months ago -- 2. p_EndDate SMALLDATETIME - Ending date -- Default is today -- Output -- None -- -- Result Set: -- None -- -- Return: @@ERROR -- Exception return values: None -- -- Author: John Panfil -- Create Date: 11/18/2004 -- Revisions: -- CREATE PROCEDURE dbo.getAvailableDiskSpaceTrend @p_StartDate SMALLDATETIME = NULL, @p_EndDate SMALLDATETIME = NULL AS SET NOCOUNT ON IF @p_StartDate IS NULL BEGIN SET @p_StartDate = DATEADD(mm,-2,GETDATE()) END IF @p_EndDate IS NULL BEGIN SET @p_EndDate = GETDATE() END DECLARE @l_Recipients VARCHAR(500), @l_Subject VARCHAR(500), @l_Message NVARCHAR(MAX) SELECT @l_Recipients = '[email protected]', @l_Subject = 'Server Free Disk Space Report on ' + @@SERVERNAME IF EXISTS ( SELECT 1 FROM NutsAndBolts.dbo.AvailableDiskSpace WHERE LastUpdate BETWEEN @p_StartDate AND @p_EndDate ) BEGIN SELECT @l_Message = N'<html>' + CHAR(10) + N'<head>' + CHAR(10) + N'<style>' + CHAR(10) + N' body { font-family: tahoma; }' + CHAR(10) + N' h1 { font-size: 14px }' + CHAR(10) + N' td { font-size: 11px; height: 23px; background: #ffffff; padding: 4px }' + CHAR(10) + N' th { font-size: 11px; height: 23px; background: #efefef; padding: 4px; font-weight: 1000; text-align: left }' + CHAR(10) + N' table { font-size: 11px; background: #bfbfbf }' + CHAR(10) + N'</style>' + CHAR(10) + N'</head>' + CHAR(10) + N'<body>' + CHAR(10) + N'<h1>Server Free Disk Space Report: ' + CONVERT(VARCHAR(19), @p_StartDate, 120) + ' to ' + CONVERT(VARCHAR(19), @p_EndDate, 120) + '</h1>' + CHAR(10) + N'<table cellspacing="1">' + CHAR(10) + N'<tr><th>Server name</th><th>Last update</th><th>Driver</th><th>Free disk space(MB)</th></tr>' + CAST ( ( SELECT td = @@SERVERNAME, '', td = LastUpdate, '', td = DriveLetter, '', td = FreeMB FROM NutsAndBolts.dbo.AvailableDiskSpace WHERE LastUpdate BETWEEN @p_StartDate AND @p_EndDate FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) + CHAR(10) + N'</table>' + CHAR(10) + N'<body>' + CHAR(10) + N'<html>' EXECUTE msdb.dbo.sp_send_dbmail @recipients = @l_Recipients, @subject = @l_Subject, @body = @l_Message, @body_format = 'HTML' END GO -- Drop older version if it exists IF OBJECT_ID('dbo.getDDLEventLogWeekly', 'P') IS NOT NULL DROP PROCEDURE dbo.getDDLEventLogWeekly GO -- Procedure: getDDLEventLogWeekly -- Purpose: -- Location: NutsAndBolts -- Authorized to: -- Last Update: -- -- Parameter: -- Input -- None -- Output -- None -- Return: -- -- Note: -- -- Author: Michael .H -- Create date: 2008-03-04 -- -- Revisions: -- CREATE PROCEDURE dbo.getDDLEventLogWeekly WITH ENCRYPTION AS SET NOCOUNT ON DECLARE @l_BeginDate SMALLDATETIME, @l_EndDate SMALLDATETIME, @l_Recipients VARCHAR(500), @l_Subject VARCHAR(500), @l_Message NVARCHAR(MAX), @l_DateNow SMALLDATETIME SET @l_DateNow = CONVERT(VARCHAR(10), GETDATE(), 120) SET DATEFIRST 1 SELECT @l_BeginDate = DATEADD(d, - DATEPART(dw, @l_DateNow) - 7, @l_DateNow), @l_EndDate = DATEADD(d, - DATEPART(dw, @l_DateNow), @l_DateNow), @l_Recipients = '[email protected]', @l_Subject = 'DDL Event(s) Weekly Report on ' + @@SERVERNAME IF EXISTS ( SELECT 1 FROM dbo.EventLog WHERE EventData.value('(/EVENT_INSTANCE/PostTime)[1]', 'smalldatetime') >= @l_BeginDate AND EventData.value('(/EVENT_INSTANCE/PostTime)[1]', 'smalldatetime') < @l_EndDate ) BEGIN SELECT @l_Message = N'<html>' + CHAR(10) + N'<head>' + CHAR(10) + N'<style>' + CHAR(10) + N' body { font-family: tahoma; }' + CHAR(10) + N' h1 { font-size: 14px }' + CHAR(10) + N' td { font-size: 11px; height: 23px; background: #ffffff; padding: 4px }' + CHAR(10) + N' th { font-size: 11px; height: 23px; background: #efefef; padding: 4px; font-weight: 1000; text-align: left }' + CHAR(10) + N' table { font-size: 11px; background: #bfbfbf }' + CHAR(10) + N'</style>' + CHAR(10) + N'</head>' + CHAR(10) + N'<body>' + CHAR(10) + N'<h1>Database DDL Event Log: ' + CONVERT(VARCHAR(19), @l_BeginDate, 120) + ' to ' + CONVERT(VARCHAR(19), @l_EndDate, 120) + '</h1>' + CHAR(10) + N'<table cellspacing="1">' + CHAR(10) + N'<tr><th>Database name</th><th>Event type</th><th>User name</th><th>Login name</th><th>Post time</th><th>Command text</th></tr>' + CAST ( ( SELECT td = EventData.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(128)'), '', td = EventData.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(128)'), '', td = EventData.value('(/EVENT_INSTANCE/UserName)[1]', 'varchar(128)'), '', td = EventData.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(128)'), '', td = EventData.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime'), '', td = EventData.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') FROM NutsAndBolts.dbo.EventLog WHERE EventData.value('(/EVENT_INSTANCE/PostTime)[1]', 'smalldatetime') >= @l_BeginDate AND EventData.value('(/EVENT_INSTANCE/PostTime)[1]', 'smalldatetime') < @l_EndDate FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) + CHAR(10) + N'</table>' + CHAR(10) + N'<body>' + CHAR(10) + N'<html>' EXECUTE msdb.dbo.sp_send_dbmail @recipients = @l_Recipients, @subject = @l_Subject, @body = @l_Message, @body_format = 'HTML' END GO USE master GO IF OBJECT_ID('dbo.sp_LogError', 'P') IS NOT NULL DROP PROCEDURE dbo.sp_LogError GO -- Procedure: sp_LogError -- Purpose: Add erorr message info to ErrorLog table for late review -- Location: master -- Authorized to: public -- Last Update: -- -- Parameter: -- Input -- 1. p_Err INT, -- 2. p_Msg VARCHAR(500), -- 3. p_Id VARCHAR(50), -- 4. p_ProcName VARCAHR(50), -- 5. p_DBName VARCAHR(30), -- Output -- None -- Return: 0 : Procedure executed sucessfully -- Other : Procedure execute failure, the error code (system error code) -- -- Note: -- -- TIME, ERR, MSG, ID, PROCNAME, DBName, DBUSER, HOSTNAME, CHECKED -- TIME: The time When error happens -- ERR: A user defined error message Number stored in ErrorLog table. -- Error numbers should be greater than 50000. Ad hoc messages raise -- an error of 50000. The maximum error number is 2^31 - 1. -- MSG: An ad hoc message string; it can have as many as 8000 chars. -- All ad hoc messages have a standard message id of 14000. -- Here we fix the maximum message length to be 100. -- ID: Operations and/or parameters that involve with the error -- PROCNAME: Name of the Procedure that error occurs -- DBName: The name of the current DB in which the procedure runs -- DBUSER: User database user name -- HOSTNAME: The workstation name -- CHECKED: See if the error has been checked -- -- Author: -- Create date: 08/23/99 -- -- Revisions: -- CREATE PROCEDURE dbo.sp_LogError @p_Err INT, @p_Msg VARCHAR(500), @p_Id VARCHAR(50), @p_ProcName VARCHAR(50), @p_DBName VARCHAR(30) WITH ENCRYPTION AS SET NOCOUNT ON DECLARE @l_Err INT INSERT INTO NutsAndBolts.dbo.ErrorLog ( Err, Msg, Id, ProcName, DBName ) VALUES ( @p_Err, @p_Msg, @p_Id, @p_ProcName, @p_DBName ) SET @l_Err = @@ERROR RETURN @@ERROR GO GRANT EXECUTE ON sp_LogError TO public GO IF OBJECT_ID('dbo.sp_LogEvent', 'P') IS NOT NULL DROP PROCEDURE dbo.sp_LogEvent GO -- Procedure: sp_LogEvent -- Purpose: Add ddl event message info to EventLog table for late review -- Location: master -- Authorized to: rl_DataUpload -- Last Update: -- -- Parameter: -- Input -- 1. p_EventData XML -- Output -- None -- Return: -- -- Note: -- -- Author: Michael .H -- Create date: 2008-03-04 -- -- Revisions: -- CREATE PROCEDURE dbo.sp_LogEvent @p_EventData XML WITH ENCRYPTION AS SET NOCOUNT ON INSERT INTO NutsAndBolts.dbo.EventLog ( EventData ) VALUES ( @p_EventData ) RETURN @@ERROR GO GRANT EXECUTE ON sp_LogEvent TO public GO IF OBJECT_ID('dbo.sp_TrackProcUsage', 'P') IS NOT NULL DROP PROCEDURE dbo.sp_TrackProcUsage GO -- Procedure: sp_TrackProcUsage -- Purpose: Track the usage of a stored procedure -- Location: master -- Authorized to: None -- Last Update: -- Parameter: -- Input -- 1 : p_TrackType TINYINT - Type or tracking -- 0 : Track by procedure -- 1 : Track for all times -- 2 : Track by day -- 2 : p_DBName VARCHAR(20) - Database the procedure resides on -- 3 : p_ProcName VARCHAR(25) - Procedure Name -- 4 : p_Id VARCHAR(15) - Identifer used in the procedure -- Output -- None -- Result Set: -- None -- -- Return: @@ERROR -- Exception return values: -- -- Author: Yi Wang -- Create date: 12/18/99 -- Revisions: -- CREATE PROCEDURE dbo.sp_TrackProcUsage @p_TrackType TINYINT, @p_DBName VARCHAR(20), @p_ProcName VARCHAR(25), @p_Id VARCHAR(15) AS SET NOCOUNT ON DECLARE @l_MaxCnt INT, @l_Cnt INT, @l_Today DATETIME, @l_HostName VARCHAR(20), @l_DBUser VARCHAR(20), @l_AppName VARCHAR(30) IF @p_TrackType IS NULL SET @p_TrackType = 0 SET @p_DBName = RTRIM(LTRIM(@p_DBName)) SET @p_ProcName = RTRIM(LTRIM(@p_ProcName)) SET @p_Id = RTRIM(LTRIM(@p_Id)) SET @l_MaxCnt = 2147000000 SET @l_Today = GETDATE() IF @p_TrackType = 2 BEGIN SET @l_Today = CONVERT(DATETIME, CONVERT(CHAR(10), @l_Today, 120)) END SET @l_HostName = LEFT(RTRIM(LTRIM(HOST_NAME())), 20) SET @l_DBUser = LEFT(RTRIM(LTRIM(SUSER_SNAME())), 20) SET @l_AppName = LEFT(RTRIM(LTRIM(APP_NAME())), 30) IF @p_TrackType IN (1, 2) BEGIN IF EXISTS ( SELECT 1 FROM NutsAndBolts.dbo.ProcUsage WHERE TrackType = @p_TrackType AND DBName = @p_DBName AND ProcName = @p_ProcName AND ISNULL(HostName, '') = ISNULL(@l_HostName, '') AND ISNULL(DBUser, '') = ISNULL(@l_DBUser, '') AND ISNULL(AppName, '') = ISNULL(@l_AppName, '') AND LastAccess = @l_Today AND AccessCount > @l_MaxCnt ) BEGIN UPDATE NutsAndBolts.dbo.ProcUsage SET AccessCount = 0 WHERE TrackType = @p_TrackType AND DBName = @p_DBName AND ProcName = @p_ProcName AND ISNULL(HostName, '') = ISNULL(@l_HostName, '') AND ISNULL(DBUser, '') = ISNULL(@l_DBUser, '') AND ISNULL(AppName, '') = ISNULL(@l_AppName, '') AND LastAccess = @l_Today AND AccessCount > @l_MaxCnt END UPDATE NutsAndBolts.dbo.ProcUsage SET Id = @p_Id, AccessCount = AccessCount + 1 WHERE TrackType = @p_TrackType AND DBName = @p_DBName AND ProcName = @p_ProcName AND ISNULL(HostName, '') = ISNULL(@l_HostName, '') AND ISNULL(DBUser, '') = ISNULL(@l_DBUser, '') AND ISNULL(AppName, '') = ISNULL(@l_AppName, '') AND LastAccess = @l_Today END ELSE BEGIN IF EXISTS ( SELECT 1 FROM NutsAndBolts.dbo.ProcUsage WHERE TrackType = @p_TrackType AND DBName = @p_DBName AND ProcName = @p_ProcName AND ISNULL(HostName, '') = ISNULL(@l_HostName, '') AND ISNULL(DBUser, '') = ISNULL(@l_DBUser, '') AND ISNULL(AppName, '') = ISNULL(@l_AppName, '') AND AccessCount > @l_MaxCnt ) BEGIN UPDATE NutsAndBolts.dbo.ProcUsage SET AccessCount = 0 WHERE TrackType = @p_TrackType AND DBName = @p_DBName AND ProcName = @p_ProcName AND ISNULL(HostName, '') = ISNULL(@l_HostName, '') AND ISNULL(DBUser, '') = ISNULL(@l_DBUser, '') AND ISNULL(AppName, '') = ISNULL(@l_AppName, '') AND AccessCount > @l_MaxCnt END UPDATE NutsAndBolts.dbo.ProcUsage SET Id = @p_Id, LastAccess = @l_Today, AccessCount = AccessCount + 1 WHERE TrackType = @p_TrackType AND DBName = @p_DBName AND ProcName = @p_ProcName AND ISNULL(HostName, '') = ISNULL(@l_HostName, '') AND ISNULL(DBUser, '') = ISNULL(@l_DBUser, '') AND ISNULL(AppName, '') = ISNULL(@l_AppName, '') END SET @l_Cnt = @@ROWCOUNT IF ISNULL(@l_Cnt, 0) = 0 BEGIN INSERT INTO NutsAndBolts.dbo.ProcUsage ( TrackType, DBName, ProcName, Id, LastAccess) VALUES ( @p_TrackType, @p_DBName, @p_ProcName, @p_Id, @l_Today ) END RETURN @@ERROR GO -- -- Add the job Track Free disk space -- USE msdb GO BEGIN TRANSACTION DECLARE @l_JobId BINARY(16), @l_Err INT SELECT @l_Err = 0 IF NOT EXISTS ( SELECT 1 FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]' ) EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]' -- Delete the job with the same name (if it exists) SELECT @l_JobId = job_id FROM msdb.dbo.sysjobs WHERE (name = N'Track Free disk space') IF (@l_JobId IS NOT NULL) BEGIN -- Check if the job is a multi-server job IF ( EXISTS ( SELECT 1 FROM msdb.dbo.sysjobservers WHERE (job_id = @l_JobId) AND (server_id <> 0) )) BEGIN -- There is, so abort the script RAISERROR (N'Unable to import job ''Track Free disk space'' since there is already a multi-server job with this name.', 16, 1) GOTO QuitWithRollback END ELSE BEGIN -- Delete the [local] job EXECUTE msdb.dbo.sp_delete_job @job_name = N'Track Free disk space' END SELECT @l_JobId = NULL END BEGIN -- Add the job EXECUTE @l_Err = msdb.dbo.sp_add_job @job_id = @l_JobId OUTPUT, @job_name = N'Track Free disk space', @owner_login_name = N'sa', @description = N'No description available.', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level = 0 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the job steps EXECUTE @l_Err = msdb.dbo.sp_add_jobstep @job_id = @l_JobId, @step_id = 1, @step_name = N'Step 1', @command = N'EXECUTE dbo.getAvailableDiskSpace', @database_name = N'NutsAndBolts', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback EXECUTE @l_Err = msdb.dbo.sp_update_job @job_id = @l_JobId, @start_step_id = 1 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the job schedules EXECUTE @l_Err = msdb.dbo.sp_add_jobschedule @job_id = @l_JobId, @name = N'Schedule 1', @enabled = 1, @freq_type = 4, @active_start_date = 20041119, @active_start_time = 50000, @freq_interval = 1, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 0, @active_end_date = 99991231, @active_end_time = 235959 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the Target Servers EXECUTE @l_Err = msdb.dbo.sp_add_jobserver @job_id = @l_JobId, @server_name = N'(local)' IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback END COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO -- -- Add the job Mail Free disk space trend -- BEGIN TRANSACTION DECLARE @l_JobId BINARY(16), @l_Err INT SELECT @l_Err = 0 IF NOT EXISTS ( SELECT 1 FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]' ) EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]' -- Delete the job with the same name (if it exists) SELECT @l_JobId = job_id FROM msdb.dbo.sysjobs WHERE (name = N'Mail Free disk space trend') IF (@l_JobId IS NOT NULL) BEGIN -- Check if the job is a multi-server job IF ( EXISTS ( SELECT 1 FROM msdb.dbo.sysjobservers WHERE (job_id = @l_JobId) AND (server_id <> 0) )) BEGIN -- There is, so abort the script RAISERROR (N'Unable to import job ''Mail Free disk space trend'' since there is already a multi-server job with this name.', 16, 1) GOTO QuitWithRollback END ELSE BEGIN -- Delete the [local] job EXECUTE msdb.dbo.sp_delete_job @job_name = N'Mail Free disk space trend' END SELECT @l_JobId = NULL END BEGIN -- Add the job EXECUTE @l_Err = msdb.dbo.sp_add_job @job_id = @l_JobId OUTPUT, @job_name = N'Mail Free disk space trend', @owner_login_name = N'sa', @description = N'No description available.', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level = 0 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the job steps EXECUTE @l_Err = msdb.dbo.sp_add_jobstep @job_id = @l_JobId, @step_id = 1, @step_name = N'Step 1', @command = N'EXECUTE NutsAndBolts.dbo.getAvailableDiskSpaceTrend', @database_name = N'NutsAndBolts', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback EXECUTE @l_Err = msdb.dbo.sp_update_job @job_id = @l_JobId, @start_step_id = 1 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the job schedules EXECUTE @l_Err = msdb.dbo.sp_add_jobschedule @job_id = @l_JobId, @name = N'Schedule 1', @enabled = 1, @freq_type = 32, @active_start_date = 20041119, @active_start_time = 60000, @freq_interval = 2, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 1, @freq_recurrence_factor = 1, @active_end_date = 99991231, @active_end_time = 235959 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the Target Servers EXECUTE @l_Err = msdb.dbo.sp_add_jobserver @job_id = @l_JobId, @server_name = N'(local)' IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback END COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO BEGIN TRANSACTION DECLARE @l_JobId BINARY(16), @l_Err INT SELECT @l_Err = 0 IF NOT EXISTS ( SELECT 1 FROM msdb.dbo.syscategories WHERE name = N'[Uncategorized (Local)]' ) EXECUTE msdb.dbo.sp_add_category @name = N'[Uncategorized (Local)]' SELECT @l_JobId = job_id FROM msdb.dbo.sysjobs WHERE (name = N'DDL event weekly report') IF (@l_JobId IS NOT NULL) BEGIN -- Check if the job is a multi-server job IF ( EXISTS ( SELECT 1 FROM msdb.dbo.sysjobservers WHERE (job_id = @l_JobId) AND (server_id <> 0) )) BEGIN -- There is, so abort the script RAISERROR (N'Unable to import job ''DDL event weekly report'' since there is already a multi-server job with this name.', 16, 1) GOTO QuitWithRollback END ELSE BEGIN -- Delete the [local] job EXECUTE msdb.dbo.sp_delete_job @job_name = N'DDL event weekly report' END SELECT @l_JobId = NULL END BEGIN -- Add the job EXECUTE @l_Err = msdb.dbo.sp_add_job @job_id = @l_JobId OUTPUT, @job_name = N'DDL event weekly report', @owner_login_name = N'sa', @description = N'No description available.', @category_name = N'[Uncategorized (Local)]', @enabled = 1, @notify_level_email = 0, @notify_level_page = 0, @notify_level_netsend = 0, @notify_level_eventlog = 2, @delete_level = 0 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the job steps EXECUTE @l_Err = msdb.dbo.sp_add_jobstep @job_id = @l_JobId, @step_id = 1, @step_name = N'Step 1', @command = N'EXEC dbo.getDDLEventLogWeekly', @database_name = N'NutsAndBolts', @server = N'', @database_user_name = N'', @subsystem = N'TSQL', @cmdexec_success_code = 0, @flags = 0, @retry_attempts = 0, @retry_interval = 1, @output_file_name = N'', @on_success_step_id = 0, @on_success_action = 1, @on_fail_step_id = 0, @on_fail_action = 2 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback EXECUTE @l_Err = msdb.dbo.sp_update_job @job_id = @l_JobId, @start_step_id = 1 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the job schedules EXECUTE @l_Err = msdb.dbo.sp_add_jobschedule @job_id = @l_JobId, @name = N'Schedule 1', @enabled = 1, @freq_type = 8, @freq_interval = 2, @freq_subday_type = 1, @freq_subday_interval = 0, @freq_relative_interval = 0, @freq_recurrence_factor = 1, @active_start_date = 20041119, @active_end_date = 99991231, @active_start_time = 500, @active_end_time = 235959 IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback -- Add the Target Servers EXECUTE @l_Err = msdb.dbo.sp_add_jobserver @job_id = @l_JobId, @server_name = N'(local)' IF (@@ERROR <> 0 OR @l_Err <> 0) GOTO QuitWithRollback END COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO -- -- Add Operators and Alerts -- USE msdb GO IF ( EXISTS ( SELECT 1 FROM msdb.dbo.sysoperators WHERE name = N'Africa Zhou' )) EXECUTE msdb.dbo.sp_delete_operator @name = N'Africa Zhou' GO EXECUTE msdb.dbo.sp_add_operator @name = N'Africa Zhou', @enabled = 1, @email_address = N'[email protected]', @category_name = N'[Uncategorized]', @weekday_pager_start_time = 80000, @weekday_pager_end_time = 180000, @saturday_pager_start_time = 80000, @saturday_pager_end_time = 180000, @sunday_pager_start_time = 80000, @sunday_pager_end_time = 180000, @pager_days = 62 -- Add alert for full transaction log IF ( EXISTS ( SELECT 1 FROM msdb.dbo.sysalerts WHERE name = N'Full Transaction Log')) EXECUTE msdb.dbo.sp_delete_alert @name = N'Full Transaction Log' GO EXECUTE msdb.dbo.sp_add_alert @name = N'Full Transaction Log', @message_id = 9002, @severity = 0, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Full Transaction Log', @operator_name = N'Africa Zhou', @notification_method = 1 GO -- Add notifications for default alerts EXECUTE msdb.dbo.sp_add_alert @name = N'Sev. 19 Errors', @severity = 19, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Sev. 19 Errors', @operator_name = N'Africa Zhou', @notification_method = 1 GO EXECUTE msdb.dbo.sp_add_alert @name = N'Sev. 20 Errors', @severity = 20, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Sev. 20 Errors', @operator_name = N'Africa Zhou', @notification_method = 1 GO EXECUTE msdb.dbo.sp_add_alert @name = N'Sev. 21 Errors', @severity = 21, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Sev. 21 Errors', @operator_name = N'Africa Zhou', @notification_method = 1 GO EXECUTE msdb.dbo.sp_add_alert @name = N'Sev. 22 Errors', @severity = 22, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Sev. 22 Errors', @operator_name = N'Africa Zhou', @notification_method = 1 GO EXECUTE msdb.dbo.sp_add_alert @name = N'Sev. 23 Errors', @severity = 23, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Sev. 23 Errors', @operator_name = N'Africa Zhou', @notification_method = 1 GO EXECUTE msdb.dbo.sp_add_alert @name = N'Sev. 24 Errors', @severity = 24, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Sev. 24 Errors', @operator_name = N'Africa Zhou', @notification_method = 1 GO EXECUTE msdb.dbo.sp_add_alert @name = N'Sev. 25 Errors', @severity = 25, @enabled = 1, @delay_between_responses = 60, @include_event_description_in = 1, @category_name = N'[Uncategorized]' EXECUTE msdb.dbo.sp_add_notification @alert_name = N'Sev. 25 Errors', @operator_name = N'Africa Zhou', @notification_method = 1 GO -- -- Remove SQL Server built-in accounts USE master GO DROP LOGIN [BUILTIN\Administrators] GO PRINT 'SQL Server configuration completed.' PRINT CHAR(13) + CHAR(10) PRINT 'Please make sure you do the following:' PRINT CHAR(13) + CHAR(10) PRINT ' 1. Change sa password' PRINT ' 2. Change DTSAgent password' PRINT ' 3. Install applicable service pack(s)' PRINT ' 4. Configure Database mail' PRINT ' 5. Change DMClient & DMEditor password' PRINT CHAR(13) + CHAR(10) GO