MSDB veritabanını farklı örnekler arasında taşırken karşılaşılan izin sorunlarını düzeltme
Makale
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 fileBACKUP CERTIFICATE [##MS_AgentSigningCertificate##] TOFILE = 'MS_AgentSigningCertificate.remote_server.cer'gousemastergo-- 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 SIDCREATE CERTIFICATE [MS_AgentSigningCertificate.remote_server] FROMFILE = 'MS_AgentSigningCertificate.remote_server.cer'go-- Recreate the user mapped to the cert and grant the same permissions that the regular certificate needs.CREATEUSER [MS_AgentSigningCertificate.remote_server] FROM CERTIFICATE [MS_AgentSigningCertificate.remote_server]
goGRANTEXECUTETO [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.
Microsoft PaaS ilişkisel veritabanı tekliflerini kullanarak bulut, şirket içi ve karma ilişkisel veritabanları için SQL Server veritabanı altyapısını yönetme.
SQL Server veri dosyaları ve günlük dosyaları için varsayılan konumları görüntülemeyi veya değiştirmeyi öğrenin. Erişim denetim listeleri (ACL' ler) ile dosyaları korumayı öğrenin.
SQL Server ve Azure SQL Yönetilen Örneği kaynaklarını yönetmeyi ve iyileştirmeyi öğrenin. Kullanılabilir yapılandırma seçeneklerini, olası ayarları, varsayılan değerleri ve yeniden başlatma gereksinimlerini görüntüleyin.