İngilizce dilinde oku

Aracılığıyla paylaş


MSDB veritabanını farklı örnekler arasında taşırken karşılaşılan izin sorunlarını düzeltme

Bu makale, MSDB veritabanını farklı örnekler arasında taşıdığınızda oluşan izin sorunlarını çözmenize yardımcı olur.

Özgün ürün sürümü: Microsoft SQL Server
Özgün KB numarası: 2000274

Belirtiler

Aşağıdaki senaryoyu değerlendirin:

Yedekleme ve geri yükleme işlemini kullanarak veya veritabanı dosyaları (mdf ve ldf) üzerinden kopyalayarak msdb veritabanını bir örnekten diğerine taşırsınız. Ardından hedef sunucuda, SQL Server'da Sysadmin sabit rolünün parçası olmayan bir kullanıcı aşağıdaki işlemlerden birini yapmayı dener:

  • SQL Server management studio'da bir işi görüntüleyin.
  • Doğrudan T-SQL kullanarak SQL aracısı ile ilgili saklı yordamları (örneğin xp_sqlagent_enum_jobs veya sp_get_composite_job_info) çağırın.

Bu senaryoda kullanıcı aşağıdakine benzer bir hata iletisi alır:

Transact-SQL deyimi veya toplu işini yürütürken bir özel durum oluştu. (Microsoft.SqlServer.ConnectionInfo)
'xp_sqlagent_enum_jobs', 'mssqlsystemresource' veritabanı, 'sys' şeması üzerinde EXECUTE izni reddedildi. (Microsoft SQL Server, Hata: 229)

Neden

Bu sorun, SQL Aracısı sertifikasının farklı örneklerde farklı olması nedeniyle oluşur.

Çözüm

Sorunu çözmek için, hedef sunucuda aşağıdaki betiği kullanarak asıl sertifikayı geri yüklenen msdb veritabanındaki sertifikayla değiştirmeniz gerekir:

SQL
use msdb
go
-- Backup the Agent certificate from the remote server to a file
BACKUP CERTIFICATE [##MS_AgentSigningCertificate##] TO FILE = 'MS_AgentSigningCertificate.remote_server.cer'
go
use master
go
-- re-create the agent certificate on master
-- Note: Because we are making these changes using a regular user and not as part of setup, the name
-- cannot include the ## token.
-- Creating a regular certificate in this case should be the equivalent as we only need it to derive a SID
 CREATE CERTIFICATE [MS_AgentSigningCertificate.remote_server] FROM FILE = 'MS_AgentSigningCertificate.remote_server.cer'
go
-- Recreate the user mapped to the cert and grant the same permissions that the regular certificate needs.
CREATE USER [MS_AgentSigningCertificate.remote_server] FROM CERTIFICATE [MS_AgentSigningCertificate.remote_server]
go
GRANT EXECUTE TO [MS_AgentSigningCertificate.remote_server]
go

Not

Ana ve modeldeki sertifikaların makalede açıklanan betiği çalıştırmadan önce aynı olduğu bir senaryoda, betiğin yürütülmesi aşağıdaki hata iletisiyle sonuçlanır:

Msg 15232, Düzey 16, Durum 1, Satır 7
'MS_AgentSigningCertificate.remote_server20009' adlı bir sertifika zaten var veya bu sertifika veritabanına zaten eklenmiş.

Sertifikalar aynı olsa bile makalede açıklanan belirtilerle karşılaşırsanız daha fazla yardım için Microsoft Müşteri Destek Hizmetleri'ne (CSS) başvurun.