2010-10-25 13 views
2

Fondamentalement, je cherche à sélectionner le contenu d'un pdf dans une table.Aide avec OPENROWSET dans SQL Server (Problème d'emprunt d'identité)

J'utilise cette requête:

SELECT * 
FROM OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs 

La requête ne fonctionnera pas parce que mon nom d'utilisateur ne dispose pas des autorisations sur ce serveur (ni ne doit), mais je dois être en mesure d'authentifier en tant utilisateur différent pour exécuter cette requête.

Il ne sera probablement pas un problème en production car je crois que le compte qui exécute la commande aura les permissions appropriées, mais comme il est, je voudrais pouvoir "usurper" cet utilisateur (j'ai évidemment ses informations d'identification) et exécutez la requête à partir de mon compte. auriez vous des idées pour faire ça?

Merci ...

Répondre

2

Vous pouvez spécifier les détails de votre chaîne de connexion à OPENROWSET. Voir la partie { 'datasource';'user_id';'password' | 'provider_string' } de la syntaxe ci-dessous.

OPENROWSET 
({ 'provider_name', { 'datasource';'user_id';'password' 
    | 'provider_string' } 
    , { [ catalog. ] [ schema. ] object 
     | 'query' 
    } 
    | BULK 'data_file', 
     { FORMATFILE ='format_file_path' [ <bulk_options> ] 
     | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB } 
})<bulk_options> ::= 
    [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] 
    [ , ERRORFILE ='file_name' ] 
    [ , FIRSTROW = first_row ] 
    [ , LASTROW = last_row ] 
    [ , MAXERRORS = maximum_errors ] 
    [ , ROWS_PER_BATCH =rows_per_batch ] 
+0

@Joe - S'il le fait dans un proc stocké, les informations d'identification seront-elles stockées en texte brut? – JNK

+0

@JNK: Oui ils le feraient, mais sur la base du commentaire de l'OP disant qu'il "ne sera pas un problème en production", je pense que cela est raisonnable dans un dev. environnement. –

+0

Malheureusement user_id ne peut pas être un nom de connexion Windows (ce dont j'ai besoin) – nosirrahcd

0

Si vous allez faire beaucoup, vous pouvez le faire en tant OSQL command line query (via un fichier batch ou similaire):

OSQL -U [username] -p [password] -S [server] -D [database] -q "EXIT(SELECT * FROM OPENROWSET(BULK N'\\Server\Share\filename.pdf', SINGLE_BLOB) rs)"

Vous devez déterminer si vous voulez que la informations d'identification stockées dans la base de données ou dans un fichier, vous pouvez supprimer une fois que vous arrivez à la production.