로컬로 SQL Filestream을 사용할 수 있었지만 SQL 인증을 사용하는 원격 SQL 서버에 파일을 업로드하려고하면 Access Denied 예외가 발생합니다. 분명히 SQL Filestream은 Windows 인증 (통합 보안 = true)에서만 작동하며 현재 우리가 가지고있는 SQL 인증과는 관련이 없습니다.SQL filestream 인증 우수 사례
아무도 실제로 프로덕션 환경에서 Windows 인증을 사용하지 않으므로이 제한을 극복하는 방법을 알고 싶습니다. 가장 좋은 방법은 무엇입니까? FILESTREAM을 사용하는 경우
public static void AddItem(RepositoryFile repository, byte[] data)
{
using (var scope = new TransactionScope())
{
using (var db = new MyEntities()) // DBContext
{
db.RepositoryTable.AddObject(repository);
db.SaveChanges();
}
using (var con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
using (var cmd = new SqlCommand(string.Format("SELECT Data.PathName(), GET_FILESTREAM_TRANSACTION_CONTEXT() FROM dbo.RepositoryTable WHERE ID='{0}'", repository.ID), con)) // "Data" is the column name which has the FILESTREAM. Data.PathName() gives me the local path to the file.
{
cmd.Connection.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var path = reader.GetString(0);
var transactionContext = reader.GetSqlBytes(1).Buffer;
var fileStream = new SqlFileStream(path, transactionContext, FileAccess.Write);
fileStream.Write(contents, 0, contents.Length); // I get the error at this line.
fileStream.Close();
}
}
}
scope.Complete();
}
}
예외가 발생하는 코드를 표시 할 수 있습니까? –
"실제 환경에서는 Windows 인증을 사용하지 않습니다."다음은 모든 경우에 해당하지 않는 구현을했습니다 (Windows 서비스, 웹 응용 프로그램 및 데스크톱 응용 프로그램) –
@ Philhunt - 질문을 업데이트했습니다. 코드 스 니펫. 바이트를 파일에 쓰려고 할 때 오류가 발생합니다. 프로세스는 분명히 파일에 액세스 할 수 없습니다. – tempid