我有一个Access数据库,该数据库正在迁移到Azure SQL服务器后端。
我希望用户能够使用自定义表单来设置用于链接表的详细信息。
当前,我正在使用AttachDSNLessTable
用用户凭据重新创建链接表,但是这会将详细信息保存到访问文件中,而该文件不是很安全。我曾考虑过在数据库关闭期间删除链接表,但是如果该任务被终止,则连接细节将保留。
有没有一种方法可以仅针对当前会话为链接表指定用户名和密码?
答案 0 :(得分:2)
如果您正在执行从代码的重新链接,那么您应该能够通过在创建链接表时不指定describe 'Lockable' do
describe '#redis_lock' do
it "delegates functionality to Redis::Lock with proper arguments" do
# create an instance spy
redis_lock = instance_spy("Redis::Lock")
expect(Redis::Lock).to receive(:new).with('test', any_args).and_return(redis_lock)
redis_lock('test', timeout: 15) do
sleep 1
end
expect(redis_lock).to have_received(:lock)
end
end
end
对象的dbAttachSavePWD
属性来防止密码被保存。为方便起见,您还应该每次都删除 SQL链接表,然后再重新链接它,以确保尊重您的选项,并确保Microsoft Access更新链接表的架构。>
下面是一些示例代码,这些代码将删除链接表并重新链接它,显示TableDef
属性的用法:
dbAttachSavePWD
当您省略Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strConn As String
Dim AzureTableName as String
Dim AccessTableName as String
Set db = CurrentDb()
AzureTableName = "dbo.YourTable"
AccessTableName = "YourTable"
strConn = "ODBC;Driver={SQL Server};Server=YOURSERVER\SQLINSTANCE;Database=MYDATABASE;Trusted_Connection=No;UID=MyUserName;PWD=MyPassword"
db.TableDefs.Refresh
For Each tdf In db.TableDefs
If tdf.Name = AccessTableName Then
db.TableDefs.Delete tdf.Name
Exit For
End If
Next tdf
Set tdf = db.CreateTableDef(AccessTableName)
'===============================
'If you want the password to be saved, include the following 3 lines of code
'to specify the dbAttachSavePWD attribute of the TableDef being created
'If you don't want to save the password, you would omit these 3 lines of code
'===============================
If InStr(strConn, "PWD=") Then
tdf.Attributes = dbAttachSavePWD
End If
tdf.SourceTableName = AzureTableName
tdf.Connect = strConn
db.TableDefs.Append tdf
属性时,该表将在此会话期间链接并可用。当您关闭Microsoft Access数据库并重新打开它(在运行任何重新链接代码之前)时,该表似乎仍然处于链接状态(显示在数据库窗口中),但是如果您尝试访问它,则会收到错误,阻止在没有正确重新链接的情况下访问数据。