Đây là những gì tôi sẽ làm một cách an toàn lưu trữ kết nối chuỗi thông tin
Tải về và cài đặt Visual Studio Express 2012 for Windows (FREE)
mở nó as Administrator và tạo ra một dự án mới.Chọn Visual C#
sau đó Class Library
và đổi tên nó để HiddenConnectionString
Trong Solution Explorer, đổi tên Class1.cs
để MyServer.cs
Nhấp chuột phải dự án MyConnection
của bạn trong Solution Explorer và chọn Add Reference
Loại activeX
trong hộp tìm kiếm và đánh dấu vào Microsoft ActiveX Data Objects 6.1 Library
Sao chép và dán bên dưới mã vào số MyServer.cs
thay thế hoàn toàn mọi thứ trong tệp.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.IO;
using ADODB;
namespace HiddenConnectionString
{
[InterfaceType(ComInterfaceType.InterfaceIsDual),
Guid("2FCEF713-CD2E-4ACB-A9CE-E57E7F51E72E")]
public interface IMyServer
{
Connection GetConnection();
void Shutdown();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("57BBEC44-C6E6-4E14-989A-B6DB7CF6FBEB")]
public class MyServer : IMyServer
{
private Connection cn;
private string cnStr = "Provider=SQLOLEDB; Data Source=SERVER\\INSTANCE; Initial Catalog=default_catalog; User ID=your_username; Password=your_password";
public MyServer()
{
}
public Connection GetConnection()
{
cn = new Connection();
cn.ConnectionString = cnStr;
cn.Open();
return cn;
}
public void Shutdown()
{
cn.Close();
}
}
}
Xác định vị trí cnStr
biến trong các mã và cập nhật chi tiết chuỗi kết nối của bạn.
Nhấp chuột phải vào giải pháp *HiddenConnectionString
* trong Solution Explorer và chọn Thuộc tính.
Nhấp vào Application
tab ở phía bên trái, sau đó Assembly Info
và đánh dấu Make Assembly COM-Visible
Nhấp vào *Build*
từ menu bên trái và đánh dấu Register For COM Interop
Lưu ý: Nếu bạn đang phát triển cho Văn phòng 64 bit thì hãy đảm bảo bạn thay đổi Platform Target
trên menu Xây dựng tới x64
! Điều này là bắt buộc đối với các thư viện Office COM 64 bit để tránh bất kỳ lỗi liên quan đến ActiveX nào.
Nhấp chuột phải vào HiddenConnectionString
trong Solution Explorer và chọnBuild
từ menu.
Nếu mọi thứ đều ổn, thì HiddenConnectionString.dll
và HiddenConnectionString.tlb
của bạn sẽ được tạo thành công.Đi tới con đường này ngay bây giờ
C:\Users\administrator\Documents\Visual Studio 2012\Projects\HiddenConnectionString\HiddenConnectionString\bin\Debug
và bạn sẽ thấy tệp của mình.
Bây giờ mở Excel và đi đến VBE. Nhấp vào Tools
và chọn References
.
Nhấp vào nút Duyệt và điều hướng đến HiddenConnectionString.tlb
.
Ngoài ra, hãy thêm tham chiếu đến Microsoft ActiveX Object 6.1 Library
- điều này là để bạn có thể sử dụng thư viện ADODB.
nhấp chuột Bây giờ ngay bất cứ nơi nào trong cửa sổ Project Explorer và Chèn mới Module
sao chép và dán đoạn mã dưới đây để nó
Option Explicit
Sub Main()
Dim myCn As MyServer
Set myCn = New MyServer
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "Select * from [TABLE_NAME]", myCn.GetConnection
Range("A1").CopyFromRecordset rs
rs.Close
myCn.Shutdown
Set rs = Nothing
Set myCn = Nothing
Columns.AutoFit
End Sub
Thay thế [TABLE_NAME]
với tên bảng thực tế trong y cơ sở dữ liệu của chúng tôi.
Lượt F5 hoặc nhấn nút màu xanh lá cây phát trên ribbon.
Nếu mọi thứ OK, bây giờ bạn sẽ thấy Bảng được trả lại trên bảng tính của bạn.
mẫu của tôi:
Như bạn có thể nhìn thấy. Thêm tài liệu tham khảo vào thư viện COM của riêng bạn và lưu trữ thông tin đăng nhập và các dữ liệu nhạy cảm khác bên trong biên dịch .dll
bảo vệ dữ liệu của bạn (chuỗi kết nối). Rất khó để dịch ngược tệp *.dll
để nhận bất kỳ thông tin hợp lý nào từ nó. Có nhiều kỹ thuật mã hóa khác nhau để bảo vệ *.dll
của bạn nhiều hơn nhưng tôi sẽ không đi sâu vào chi tiết ngay bây giờ. Điều này tự nó đạt được những gì bạn yêu cầu.
myCn.GetConnection
trả về đối tượng ADODB.Connection
đã được khởi tạo bên trong thư viện COM được tham chiếu. Không có người dùng Excel sẽ được trình bày với chuỗi kết nối hoặc dữ liệu nhạy cảm (thực sự không ai khác).
Bạn có thể sửa đổi mã C# để chấp nhận các tham số từ VBA tức là đăng nhập, mật khẩu, danh mục ban đầu, truy vấn để thực thi v.v ... nếu bạn có người dùng với các đặc quyền khác nhau trên phiên bản SQL Server của bạn ý tưởng tồi để cho phép mọi người đăng nhập.
Lưu ý: không có lỗi xử lý được thêm vào mã C# và VBA.Tôi khuyên bạn nên làm việc trên nó nếu bạn đang có kế hoạch sử dụng kỹ thuật tôi đã mô tả ở trên.
Xem câu trả lời của tôi cho chủ đề http://stackoverflow.com/questions/1987333/excel-vba-secure-way-to-get-users-database-login-password-for-connection-string/2018970 # 2018970 – MikeD
@Remou. cảm ơn. @MikeD. Cảm ơn, tôi đã kiểm tra điều đó. Là sử dụng registry mặc dù, và tôi đang cố gắng để tránh điều đó. Bởi vì khắc phục sự cố một vấn đề prod sẽ trở thành một cơn ác mộng khi sử dụng cài đặt đăng ký (vì nó sẽ là thiết lập máy người dùng cụ thể) .... – Shiva
Tôi đã tìm thấy sổ đăng ký là một nơi tuyệt vời cho nó, nhưng điều đó đòi hỏi phải thiết lập bổ sung cho mỗi người dùng. Tôi có thể hiểu tại sao bạn lại muốn tránh điều đó. – RubberDuck