كيف يمكنني الحصول على ms-access للاتصال بـ ms-sql كمستخدم مختلف؟

StackOverflow https://stackoverflow.com/questions/50786

  •  09-06-2019
  •  | 
  •  

سؤال

كيف يمكنني الحصول على وصول ms للاتصال (من خلال ODBC) بقاعدة بيانات ms-sql كمستخدم مختلف عن معرف Active Directory الخاص به؟

لا أريد تحديد حساب في اتصال ODBC، أريد القيام بذلك على جانب الوصول إلى MS لإخفائه عن المستخدمين.إن القيام بذلك في اتصال ODBC سيعيدني مباشرة إلى الوضع الأصلي الذي أحاول تجنبه.

نعم، هذا يتعلق بسؤال سابق: http://www.stackoverflow.com/questions/50164/

هل كانت مفيدة؟

المحلول

أعتقد أنه يمكنك جعل هذا يعمل بالطريقة التي تريدها إذا كنت تستخدم "اتصال ODBC DSN-LESS"

إذا كنت بحاجة إلى ذلك، فاحتفظ بـ ODBC DSN الخاص بك على أجهزة المستخدمين لديك باستخدام مصادقة Windows.امنح المستخدمين حق الوصول للقراءة فقط إلى قاعدة البيانات الخاصة بك.(إذا قاموا بإنشاء ملف mdb جديد وربط الجداول، فلن يتمكنوا إلا من قراءة البيانات.)

قم بإنشاء تسجيل دخول SQL الذي لديه إذن القراءة/الكتابة إلى قاعدة البيانات الخاصة بك.

اكتب روتين VBA الذي يتكرر على الجداول المرتبطة ويعيد تعيين الاتصال لاستخدام تسجيل دخول SQL الخاص بك ولكن تأكد من استخدام بناء الجملة "DSN-Less".

"ODBC;Driver={SQL Native Client};" &
       "Server=MyServerName;" & _
       "Database=myDatabaseName;" & _
       "Uid=myUsername;" & _
       "Pwd=myPassword"

قم باستدعاء هذا الروتين كجزء من رمز بدء التشغيل الخاص بك.

بعض الملاحظات حول هذا النهج:

  • يبدو أن Access يواجه مشكلة في معلومات الاتصال بمجرد التغيير من القراءة/الكتابة إلى القراءة فقط ومحاولة الرجوع إلى القراءة/الكتابة دون إغلاق ملف قاعدة البيانات (mde/mdb) وإعادة فتحه.إذا كان بإمكانك تغيير هذا مرة واحدة عند بدء التشغيل إلى القراءة/الكتابة وعدم تغييره أثناء الجلسة، فيجب أن يعمل هذا الحل.

  • باستخدام DSN - اتصال أقل، يمكنك إخفاء بيانات الاعتماد عن المستخدم في التعليمات البرمجية (على افتراض أنك تمنحهم ملف mde، فيجب أن تكون على ما يرام).عادةً لا تكون سلاسل الاتصال ذات الترميز الثابت فكرة جيدة، ولكن بما أنك تتعامل مع تطبيق داخلي، فيجب أن تكون موافقًا على هذا الأسلوب.

نصائح أخرى

أعتقد أنه سيتعين عليك تشغيل عملية MS Access ضمن الحساب الذي تريد استخدامه للاتصال.هناك العديد من الأدوات التي تتيح لك القيام بذلك، مثل وحدة المعالجة المركزية.ستتيح لك هذه الأداة تشفير كلمة المرور أيضًا.

نعترف هنا أنك تستخدم اتصال ODBC بقاعدة البيانات الخاصة بك مع تشغيل الأمان المتكامل، بحيث لا يكون لديك/لا ترغب في كتابة قيمة اسم مستخدم/كلمة مرور في سلسلة الاتصال (وهذا هو الخيار الصحيح بالنسبة لي).

وفي هذه الحالة، لحسن الحظ، لا توجد طريقة "لمحاكاة" مستخدم آخر عند الاتصال بالبيانات.اعترف معي أن القدرة على صنع شيء كهذا سيكون بمثابة اختراق كبير في مجال الأمن المتكامل!

لقد فهمت من مشاركتك السابقة أنك تريد أن يتمكن المستخدمون من تحديث البيانات أو عدم الاعتماد على واجهة العميل التي يستخدمونها.بالنسبة لي، ستكون الفكرة هي إنشاء عرض مرتبط "غير قابل للتحديث" لكل جدول.لنفترض أنه لكل جدول يسمى Table_Blablabla قمت بإنشاء طريقة عرض (= استعلام في Access) تسمى View_Table_Blablabla ...).

عند استخدام Access، يمكنك بعد ذلك أن تقرر في وقت التشغيل ما إذا كنت تريد فتح الجدول القابل للتحديث أو طريقة العرض للقراءة فقط.يمكن القيام بذلك على سبيل المثال في وقت التشغيل، في ملف form_Open الحدث، عن طريق تعيين مصدر سجلات النموذج إما إلى الجدول أو طريقة العرض.

@ فيليب
أفترض أنك تستخدم الكلمة يعترف باعتبارها تعادل تقريبا يفهم او ربما يوافق;على عكس العكس ينكر.

أنا أفهم الآثار المترتبة على قيام جميع المستخدمين بتسجيل الدخول إلى قاعدة البيانات باستخدام معرف وكلمة مرور واحدة (وحفظهما في التطبيق).وهذا بالنسبة لي يمثل خطرًا أقل من المشكلة التي أواجهها الآن.
@عن

بعض الخلفية الإضافية للمشكلة:لدي اتصالات ODBC تم إعدادها على كل محطة من محطات عمل المستخدمين باستخدام مصادقة Windwos NT.في معظم الأحيان، يتصل المستخدمون باستخدام إعداد MDE لاستخدام اتصال ODBC - وفي هذه الحالة يكون لديهم دائمًا القدرة على إضافة/تحديث/حذف البيانات.

تكمن المشكلة في أن بعض المستخدمين لديهم تعليم كافٍ حول MS-Access لإنشاء قاعدة بيانات جديدة وربطها بخادم MS-SQL.يمكنهم بعد ذلك تحرير البيانات مباشرة داخل الجداول بدلاً من المرور عبر التطبيق الذي يقوم بقدر معين من التحقق من الصحة والإمساك باليد.و هم يحب أفعل هذا، ولكن في بعض الأحيان يفسد الأمر ويسبب لي مشاكل.

ما كنت آمل أن أفعله (والذي جربته للتو) هو تحديث الروابط إلى قاعدة البيانات بشيء مثل هذا لكل جدول (ملاحظة:لقد قمت بتبديل اتصال ODCB إلى مصادقة SQL Server لهذه التجربة، وأضفت الحسابات إلى خادم SQL أيضًا: يقرأ فقط - والتي لا يمكن لأية تحديثات، و قراءة و كتابة - الذي يتمتع بامتيازات كاملة على الطاولة).

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readonly;" & _
                "PWD=readonly_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

هذا يمنعهم من التحرير، ولكن لا يمكنني الحصول على قراءة لاحقة للعمل

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readwrite;" & _
                "PWD=readwrite_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

يبدو أن أي إذن أتصل به أولاً، يظل ثابتًا بشكل دائم.إذا بدأت القراءة والكتابة ثم انتقلت إلى القراءة فقط، فسيظل الجدول يتمتع بامتيازات القراءة والكتابة

لماذا لا تستخدم الأمان المتكامل/Windows.يمكنك منح مجموعة الدليل النشط الحقوق التي تريدها للمستخدمين ثم إضافة حسابات المستخدمين إلى تلك المجموعة.أعتقد أنه يمكنك أيضًا استخدام ميزة أدوار خادم SQL بالإضافة إلى ذلك للحد من الوظائف بناءً على تطبيق العميل المستخدم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top