none
Zugriff über Linked Server in SSRS RRS feed

  • Frage

  • Hallo an alle. Ich hätte da mal wieder ein Problem. Ich habe einen SQL Server 2008 mit einen SQL Server 2005 über Linked Server miteinander verbunden. Ein "ServiceUser" auf dem 2005er ermöglicht mir den Zugriff vom 2008er über SQL Authentifizierung.

    Nun habe ich im BIDS ein Dataset angelegt welches über einen SQL Befehl den Linked Server (2005er) Datenabfragt.

    Diese werden einfach stur angedruckt.

    Das Problem ist nun das ein Execute Fehler für Dataset 1 auftritt, beim Ausführen des Reports, wenn ein normaler DomainUser über Windows Auth. den Report absetzt. Welche Rechte braucht denn nun der User um den Select über LinkedServer abzusetzen?

    folgende Rechte habe ich schon vergeben:

    USE MASTER

    GO

    GRANT EXECUTE ON SYS.XP_PROP_OLEDB_PROVIDER TO [Domain\Domainuser] 

    Mittwoch, 2. März 2016 16:41

Alle Antworten

  • Du schreibst leider wenig darüber, wie Du den Verbindungsserver eingerichtet hast.

    Ich würde dort so etwas erwarten, wenn alle User darüber zugreifen sollen:

    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'<Verbindungsserver>',@useself=N'False',@locallogin=NULL,@rmtuser=N'<SQL Login>',@rmtpassword='########'
    Warum verwendest Du nicht zwei Datasets im Report und hinterlegst dort die Security?


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Donnerstag, 3. März 2016 07:07
    Beantworter
  • Hallo Christoph vielen Dank für deine Antwort,

    ich habe den Linked Server über das SQL Server Management Studio erstellt (grafisch). Kann ich irgendwie den bestehenden Linked Server als T-SQL Statement anzeigen lassen??

    Ansonsten ist der Linked Server so definiert das die Daten über ein SQL Server Account auf dem 2005er geholt werden. Was auch funktioniert jedoch weiß ich eben nicht welche Rechte ich den User auf dem 2008er setzen soll damit der ein Select über den Linked Server ausführen kann.

    Die Fehlermeldung lautet dann.

    Fehler bei der Berichtsverarbeitung (rsProcessingAborted). Es kann keine Verbindung mit dem XXX-Datenquelle hergestellt werden. Bei höheren Rechten auf Seite 2008er (z.b SA) funktioniert alles bestens.

    Donnerstag, 3. März 2016 09:44
  • Rechte Maustaste auf den Verbindungsserver und "Skript für Verbindungsserver als" "CREATE in" "Neues Abfrage-Editor-Fenster" erstellen lassen.

    In der GUI siehst Du in den Eigenschaften der Verbindungsserver unter Sicherheit ganz unten die Auswahl "In folgendem Sicherheitskontext verwendet". Dort kann man es auch manuell eintragen.

    HTH!


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Donnerstag, 3. März 2016 10:28
    Beantworter
  • Danke Christoph! das wusste ich noch gar nicht das das geht!

    Das mit dem Sicherheitskontext habe ich auch genau so gemacht.

    /****** Object:  LinkedServer [192.168.10.190]    Script Date: 03/03/2016 11:30:24 ******/
    EXEC master.dbo.sp_addlinkedserver @server = N'192.168.10.190', @srvproduct=N'SQL Server'
     /* For security reasons the linked server remote logins password is changed with ######## */
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'192.168.10.190',@useself=N'False',@locallogin=NULL,@rmtuser=N'service_192_168_10_190',@rmtpassword='########'
    
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'collation compatible', @optvalue=N'false'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'data access', @optvalue=N'true'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'dist', @optvalue=N'false'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'pub', @optvalue=N'false'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'rpc', @optvalue=N'false'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'rpc out', @optvalue=N'false'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'sub', @optvalue=N'false'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'connect timeout', @optvalue=N'0'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'collation name', @optvalue=null
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'lazy schema validation', @optvalue=N'false'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'query timeout', @optvalue=N'0'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'use remote collation', @optvalue=N'true'
    GO
    
    EXEC master.dbo.sp_serveroption @server=N'192.168.10.190', @optname=N'remote proc transaction promotion', @optvalue=N'true'
    GO
    
    
    

    anbei der Source vom Linked Server. Sieht für mich eigentlich nach dem aus was du im Post 2 geschrieben hast.

    Donnerstag, 3. März 2016 10:34
  • Dann poste doch mal das SQL. Verwendest Du Openquery?

    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Donnerstag, 3. März 2016 11:02
    Beantworter
  • ich erstelle ein Verbindungseigenschaft auf irgendeine DB via Windows Authentifizierung. Danach erstelle ich ein Dataset mit folgenden SQL:

    SELECT     *
    FROM         [192.168.10.190].[Protokoll].dbo.Tagesprotokoll
    WHERE (Zeitstempel BETWEEN @StartDatum AND @EndeDatum)

    wobei natürlich @StartDatum und @EndeDatum Parameter sind (Datumsauswahlfunktion). Sollte doch soweit funktionieren? Oder sollte ich eigentlich im Report die Verbindungseigenschaften des "ServiceAccounts" nutzen? 

    Donnerstag, 3. März 2016 11:42
  • Kann sich ein normaler User denn über das Management Studio mit dem 2008er verbinden und dort über Openquery oder die Syntax oben auf den anderen Server abfragen?

    Kannst ja auch mal ein SQL Login anlegen und dich selber darüber verbinden.

    Wird im 2005er das fehlerhafte Login protokolliert?

    Meiner Meinung nach muss auch die erste Zeile anders lauten:

    EXEC master.dbo.sp_addlinkedserver @server = N'192.168.10.190', @srvproduct=N'<Instanzname>', @provider=N'SQLNCLI', @datasrc=N'<Instanzname>', @catalog=N'<Standard DB>';


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Donnerstag, 3. März 2016 12:23
    Beantworter