Identifizieren einer Datenquelle mithilfe eines Ad-hoc-Namens

Ein Ad-hoc-Name kann als Tabellenverweis verwendet werden, wenn auf die OLE DB-Datenquelle nicht häufig genug verwiesen wird, um die Konfiguration eines Verbindungsservers zu rechtfertigen. In SQL Server können Sie die Funktionen OPENROWSET und OPENDATASOURCE zum Angeben eines Ad-hoc-Namens verwenden.

Die Steuerung des Zugriffs auf eine bestimmte Datenquelle steht nur über Verbindungsserver zur Verfügung. Da diese Steuerung nicht für Ad-hoc-Namen verfügbar ist, werden diese standardmäßig für alle OLE DB-Anbieter mit Ausnahme des SQL Server Native Client-OLE DB-Anbieters deaktiviert.

Wichtiger HinweisWichtig

Mitglieder der festen Serverrolle sysadmin können für jede SQL Server-Instanz die Ad-hoc-Connectornamen für einen OLE DB-Anbieter mithilfe der DisallowAdhocAccess-Anbieteroption und der Ad Hoc Distributed Queries-Serverkonfigurationsoption aktivieren oder deaktivieren. Bei aktiviertem Ad-hoc-Zugriff kann ein beliebiger Benutzer, der an der Instanz angemeldet ist, SQL-Anweisungen mit Ad-hoc-Connectornamen ausführen, die auf eine beliebige Datenquelle im Netzwerk verweisen. Auf die Datenquelle muss mithilfe von diesem OLE DB-Anbieter zugegriffen werden. Mitglieder der sysadmin-Rolle können zwecks Steuerung des Zugriffs auf Datenquellen den Ad-hoc-Zugriff auf diesen OLE DB-Anbieter deaktivieren. Auf diese Weise können Benutzer lediglich auf diejenigen Datenquellen zugreifen, auf die mithilfe von Verbindungsservernamen verwiesen wird, die von Administratoren definiert wurden. Standardmäßig ist der Ad-hoc-Zugriff nur für den SQL Server Native Client-OLE DB-Anbieter aktiviert. Für alle weiteren OLE DB-Anbieter ist die Option deaktiviert.

OPENROWSET und OPENDATASOURCE stellen Ad-hoc-Verbindungsinformationen bereit. Sie können alle Informationen, die für den Zugriff auf die OLE DB-Datenquelle erforderlich sind, mithilfe dieser Funktionen angeben; Sie können OPENROWSET und OPENDATASOURCE jedoch nicht austauschbar verwenden:

  • Sie können OPENROWSET überall dort verwenden, wo der OLE DB-Anbieter Rowsets zurückgibt, indem Sie entweder einen Tabellennamen (oder Sichtnamen) oder eine Abfrage angeben, die ein Rowset zurückgibt. OPENROWSET kann anstelle eines Tabellen- oder Sichtnamens in einer Transact-SQL-Anweisung verwendet werden.

  • Sie sollten OPENDATASOURCE nur verwenden, wenn der Anbieter Rowsets bereitstellt und die Schreibweise catalog**.schema.object verwendet. OPENDATASOURCE kann an denselben Stellen in der Transact-SQL-Syntax verwendet werden wie ein Verbindungsservername. Somit kann OPENDATASOURCE in der catalog.schema.**object-Schreibweise als der erste Teil eines vierteiligen Namens, der auf eine Tabelle oder Sicht verweist, verwendet werden.

Sowohl OPENROWSET als auch OPENDATASOURCE sollten in Ad-hoc-Situationen nur für den Zugriff auf externe Daten verwendet werden, wenn die Konfiguration eines dauerhaften Verbindungsservers nicht möglich ist. OPENROWSET und OPENDATASOURCE stellen nicht den gesamten Funktionsumfang eines Verbindungsservers bereit, wie z. B. die Verwaltung von Benutzernamenzuordnungen, die Fähigkeit der Abfrage der Metadaten eines Verbindungsservers und die Fähigkeit, verschiedene Verbindungseinstellungen, wie Timeoutwerte, zu konfigurieren.

SicherheitshinweisSicherheitshinweis

Wenn eine Verbindung mit einer anderen Datenquelle hergestellt wird, nimmt SQL Server die Identität des Anmeldenamens an, der für authentifizierte Windows-Anmeldungen geeignet ist; SQL Server kann jedoch nicht die Identität authentifizierter SQL Server-Anmeldennamen annehmen. Für authentifizierte SQL Server-Anmeldungen kann SQL Server daher auf eine andere Datenquelle zugreifen, z. B. auf Dateien oder nicht relationale Datenquellen wie Active Directory, indem der Sicherheitskontext des Windows-Kontos verwendet wird, unter dem der SQL Server-Dienst ausgeführt wird. Auf diese Weise ist es Anmeldenamen potenziell möglich, auf eine andere Datenquelle zuzugreifen, für die sie nicht über die Berechtigungen, jedoch über das Konto verfügen, unter dem der SQL Server-Dienst ausgeführt wird, da das Konto über die Berechtigungen verfügt. Diese Möglichkeit sollte berücksichtigt werden, wenn Sie authentifizierte SQL Server-Anmeldenamen verwenden.

Die Argumente von OPENROWSET und OPENDATASOURCE unterstützen keine Variablen. Die Argumente müssen als Zeichenfolgenliterale angegeben werden. Wenn Variablen als Argumente übergeben werden müssen, kann dynamisch eine Abfragezeichenfolge, die diese Variablen enthält, erstellt und mithilfe der EXECUTE-Anweisung ausgeführt werden.