Ein Nutzer ohne sysadmin-Recht soll eine Aktivität ausführen, die das sysadmin-Recht benötigt

Erstellen Sie ein Backup Ihrer Datenbank mit einem Klick. Für welchen Zweck kann eine solche Technik genutzt werden?

Notwendige Schritte

Beispiel

Kopieren Sie sich das folgende Script in eine Datei namens Scriptdatei.sql

  1. -- Wechseln Sie in die Datenbank, in der die gespeicherte Prozedur
    -- erstellt werden soll
    use db_production
    go
    
    -- Erstellen Sie diese - für die Ausführung des Backup-Befehls
    -- ist das sysadmin-, db_owner- oder db_backupoperator-Recht notwendig
    
    Create Procedure up_backup_Database
    As
    Backup Database db_production
    	To Disk = 'E:\MSSQL\Backup\db_production.bak'
    go
  2. -- Wechsel in die msdb
    use msdb
    go
    
    -- Erzeugen des Jobs
    
    Execute sp_add_job @job_name = 'job_backup_db_production',
    	@notify_level_eventlog = 3
    
    Execute sp_add_jobstep @job_name = 'job_backup_db_production',
    	@step_name = 'jobstep_backup_db_production',
    	@step_id = 1,
    	@subsystem = 'TSQL',
    	@command = 'Execute db_production.dbo.up_backup_Database',
    	@database_name = 'master',
    	@cmdexec_success_code = 0,
    	@on_success_action = 1,
    	@output_file_name =
    		'E:\MSSQL\own_logs\job_backup_db_production.txt',
    	-- Dies schreibt Ausgaben in die angegebene Datei
    
    	@flags = 2
    	-- Anhängen anstatt überschreiben
    
    Execute sp_add_jobserver @job_name = 'job_backup_db_production'
    go
  3. -- Erstellen der eigenen Message
    
    Execute master.dbo.sp_addmessage @msgnum = 100101,
    	-- Dies ist Ihr eigener Nummernkreis
    	@severity = 1,
    	@msgtext = 'Backup Database db_production',
    	@lang = 'us_english',
    	@with_log = 'true',
    	-- with_log ist entscheidend: Jeder Aufruf wird
    	-- ins EventLog eingetragen
    	@replace = 'replace'
    
    -- Erstellen der lokalisierten Version
    
    Execute master.dbo.sp_addmessage @msgnum = 100101,
    	@severity = 1,
    	@msgtext = 'Datenbank db_production sichern',
    	@lang = 'german',
    	@with_log = 'true',
    	@replace = 'replace'
  4. -- Erstellen der Warnung
    
    Execute sp_add_alert @name = 'alert_backup_db_production',
    	@message_id = 100101,
    	@include_event_description_in = 7,
    	-- Dies kann nützlich sein, falls Sie RaisError weitere
    	-- Informationen mitgeben möchten
    
    	@database_name = 'db_production',
    	-- In dieser Datenbank muß RaisError ausgelöst werden,
    	-- um diesen Alert zu aktivieren
    
    	@job_name = 'job_backup_db_production'
    
    go
  5. -- Erstellen der eigentlichen Prozedur
    -- und Erteilen der Execute-Berechtigung
    
    use db_production
    go
    
    Create Procedure up_start_backup
    As
    RaisError(100101, 1, 1)
    go
    
    Grant Execute On up_start_backup To [INTERNETSERVER\AspNet]
    -- Setzen Sie hier den zu dieser Aktion legitimierten Nutzer ein
    go

Den Beispiel-Code verwenden


© 2003-2018 Jürgen Auer, Berlin.