EXECUTE izni, kullanıcı tanımlı tablo türlerinde reddedildi mi?


88

SQL Server 2008'de Kullanıcı Tanımlı Tablo Türleri hakkında bir sorum var .

ASP.NET uygulamasından birine ihtiyaç duymak için SQL Server 2008 üzerinde kendi tablo türlerimizi saklı yordamlarda parametreler olarak kullanmak üzere tanımladık (ASP.NET uygulamasında sql komutunu çalıştırırken DataTable nesnesini saklı yordam için parametre olarak geçiyoruz örnek için buraya bakın )

Sorun şu ki, ASP.NET'ten Sql komutunu çalıştırdığımızda (saklı yordamı yürüt) bir hata alıyoruz:

'OurTableType', 'ourDatabase', 'ourSchema' şeması nesnesinde YÜRÜTME izni reddedildi.

Neden böyle? Neden kullanıcı tanımlı tablo türlerinde izin ayarlamamız gerekiyor? Neden yalnızca onu kullanan saklı yordamda izin ayarlanması yeterli değil? Olursa olsun, neden hayır ne var ayarlamak için varsa EXECUTEolursa olsun özellikleri penceresinde kümesine izin türü (Sadece görebiliyorum Control, References, Take Ownership, View Definition)?

Ayrıca anlamadığım şey, Controlözellikler penceresinde izin ayarının sorunu çözdüğü ve saklı yordamın sorunsuz çalıştığı.



teşekkür ederim! Aradım ama açıkça yeterince iyi değil: /
Janez

AS dboSonuna koymayı deneyin . Bunun gibi: GRANT EXEC ON TYPE::[schema].[typename] TO [User] AS dbo. Benim için çalıştı.
Jonathan

Yanıtlar:


201

Umarım bunu şimdiye kadar çözmüşsünüzdür, sorunun neredeyse 4 aylık olduğunu düşünürsek, ama çözmediyseniz, yanıtın burada olduğunu düşünüyorum.

GRANT EXEC ON TYPE::[schema].[typename] TO [User]
GO

9
Benim 2 sentim: Bağlantı doğrulama mekanizmanıza bağlı olarak, Genel gruba yürütme izni vermeniz gerekebilir. Öyleyse bağışınız şöyle görünecektir: GRANT EXEC ON TYPE :: [schema]. [Typename] TO [Public] GO
Sudhanshu Mishra

@dotnetguy çok teşekkür ederim, sizinki dışında hiçbir çözüm benim için işe yaramadı.
Mazen el Senih

3

Depolanan yordamınız dinamik sql kullanıyorsa, yani @sqloluşturulmuş ve sonra çalıştırılmışsa exec @sql, temel tablolarda verilen izne ihtiyacınız olacaktır.

Çözümlerden biri, farklı bir kullanıcı olarak çalıştırmak için saklı yordamı değiştirmektir . KENDİNİZ olarak çalışmasını sağlarsanız, son derece tehlikeli olan depolanan işlemin oluşturucusunun altında çalıştırılacaktır. Yine de başka seçeneğiniz yoksa:

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS SELF

1
Bunu işaret ettiğiniz için teşekkürler. Ancak saklı yordamda dinamik bir sql yoktur. Yalnızca INSERT INTObu kullanıcının ihtiyaç duyduğu tüm izinlere sahip olduğu genel ve "UPDATE" tablo deyimleri. Ayrıca bu kullanıcı / oturum açma, bu ASP.NET uygulamasının bu veritabanına bağlanabilmesi ve yalnızca saklı yordamları yürütebilmesi için özel olarak ayrılmıştır / oluşturulmuştur (vb oluşturma değil, oluşturan her zaman 'sa').
Janez

Teşekkürler, benim için sorun buydu. Bu sorunu yaşayan diğer okuyucular, daha fazla ipucu için Dinamik SQL ile Depolanan Procs'taki SQL Server İzinlerine başvurabilir .
Nickolay
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.