الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

صلاحيات المستخدم

مغلق
بدأه Kimo_2005 في 25 مايو 2005 · 20 رد · 3,071 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

قمت بعمل برنامج للعمل على شبكة بنظام الدومين ولكن اذا قمت بتشغيل البرنامج وقد تم دخولى لنظام الويندوز بحساب المدير(Administrator) فإن البرنامج يعمل جيدا ولكن لو قمت بالدخول بحساب مستخدم دومين عادى فلا يعمل البرنامج ويعطى رسالة تفيد بإن المستخدم ليس لة الصلاحية اللازمة للتشغيل ويطلب عمل شيئا ما بإستخدام الفئة SQLPermission

البرنامج مصمم للعمل مع سيكول سيرفر 2000 , أريد من احدكم ان يوضح كيفية التعامل مع هذة الفئة لإعطاء المستخدم العادى الصلاحية اللازمة لتشغيل البرنامج

شكرا لكم

#2

فين الشباب

تم تعديل هذه المشاركة بواسطة Kimo_2005 في 25 مايو 2005 في 14:02

#3

الأخ الكريم:

أنظر هذا الرابط

/index.ph...topic=53919&hl=

وهو من مشاركات أعضاء المنتدى وفقك الله.

السلام عليكم ورحمة الله وبركاته

سوف نقوم الان بعمل برنامج للتاكد من اسم المستخدم وكلمة السر

وصلاحيات كل مستخدم فى البرنامج

اول خطوة

بعمل فتح برنامج جديد

قم باضافة Module

واكتب الكود التالى

Imports System.Data.OleDb
Module Module2
   Public myusername As String
   Public mypassword As String
   Public addstate As Boolean
   Public delstate As Boolean
   Public editstate As Boolean
   Public mydataset As New DataSet
   Public Con As New OleDbConnection
   Public MyAdapter As OleDbDataAdapter
End Module

ارجع الان الى الشاشة الرئيسية

قم باضافة عدد 2 TextBox

وغير الاسم الى

t_username

t_password

والان اضافة الكود الخاص بلبرنامج

اضف فضاء الاسماء التالى

Imports System.Data.OleDb

وفى حدث تحميل الفورم اكتب الكود التالى

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Con.ConnectionString = "Provider=Microsoft.jet.oleDB.4.0;Data Source=" & Application.StartupPath & "\db_admin.mdb;"
       Try
           Con.Open()
       Catch ex As Exception
           MessageBox.Show(ex.Message)
       End Try
   End Sub

الخطوة التالية خطوة التاكد من اسم المستخدم وكلمة السر والصلاحيات

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       myusername = t_username.Text
       mypassword = t_password.Text
       mydataset.Clear()
       Dim Str As String = "select * from users where username='" & myusername & "' and password='" & mypassword & "'", con_str
       MyAdapter = New OleDbDataAdapter(Str, Con)
       MyAdapter.Fill(mydataset, "USER")
       If mydataset.Tables("USER").Rows.Count > 0 Then
           addstate = mydataset.Tables("USER").Rows(0).Item("addfunction")
           delstate = mydataset.Tables("USER").Rows(0).Item("deletefunction")
           editstate = mydataset.Tables("USER").Rows(0).Item("editfunction")

           Dim x As New Form2
           x.Show()
           Con.Close()
       Else
           MessageBox.Show("خطاء")
       End If
   End Sub

الان قم باضافة الشاشة التالية

وقم باضافة عدد 3Button

وقم باعادة التسمية

b_edit

b_del

b_Add

وبعد ذالك اكتب الكود التالى

Sub show_controls(ByVal enableadd As Boolean, ByVal enableedit As Boolean, ByVal enabledel As Boolean)
       b_Add.Enabled = enableadd
       b_edit.Enabled = enableedit
       b_del.Enabled = enabledel
   End Sub

ثم فى حدث تحميل الفورم التانى اكتب الكود التالى

show_controls(addstate, editstate, delstate)

ملحوظة اسم المستخدمين فى البرنامج

1 وكلمة السر 1

2 وكلمة السر 2

3 وكلمة السر3

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 25 مايو 2005 في 14:34

#4

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

اردت الايضاح حتى لا نهدر مجهود أحد

#5

صاحب الموضوع لا يسئل عن صلاحيات المستخدمين من داخل البرنامج بل يسئل عن صلاحيات تشغيل برنامجه باستخدام ال Domain User Account

جرب ايضاً هذه ال Conection String مع تغيير ما يلزم

Server=ServerName;Database=databaseName;User ID=windowsDomain\windowsUserid;Password=windowsPassword;Integrated Security=true

قم بتغيير ال WindowsDomain إلى اسم الدومين فمثلاً قد يكون بهذا الشكل

Server=ServerName;Database=Northwind;User ID=Microsoft\MyUser;Password=Arabteam;Integrated Security=SSPI

فهنا انا كتبت اسم الدومين تبعى و هو اسمه Microsoft اسئل مدير الشبكه التى يعمل عليها برنامجك

ما غير ذلك فاذكر الرسالة التى ظهرت و يفضل لو قمت باصطيادها بستخدام Try.....Catch

راجع ايضاً هذا الموضوع

/index.php?showtopic=52377

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 25 مايو 2005 في 15:24

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#6

يا أخى العزيز واضح انك ما فهمت قصدى كويس

اولا البرنامج على السيكول سيرفر وليس على أكسس داتا بيز

ثانيا الموضوع ما لة علاقة بالتحقق من اسم المستخدم فهذة مثل التحقق من ان كمية صنف معين لم تتجاوز حدها الآدنى او الاعلى بالمخزن اى مثل اى بيان على قاعدة البيانات من الممكن التحقق منها بجمل الاستعلام المختلفة

لكن قصدى هو عدم اتاحة صلاحيات من نظام التشغيل ذاتة وليس منك انت كمبرمج قد سجلت مستخدم فى قاعدة البيانات ام لا فلو كنت قد دخلت بحساب مدير (Administrator) فانة يسمح لك باستخدام البرنامج اما مستخدم عادى فلا يسمح لك

#7

شكرا لك يا أخ طارق وان شاء الله افعل ما طلبت

#8

قمت بتعديل ردى و انت ترد فى نفس الوقت راجع ردى مرة اخرى و اخبرنا بالنتيجة

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#9

قمت بأخذ صورة من رسالة الخطأ

post-50579-1117024403_thumb.jpg

#10

غير ال Connection String كما ذكرت و اخبرنا بالنتيجة

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#11

قمت بتغيير الـConnection String ولكن نفس الرسالة

#12

إرسل ال Connection String التى تستخدمها من فضلك

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#13

السلام عليكم

لإستعمال قاعدة البيانات يجب أن يكون لديك الصلاحية للإستخدام , المستخدم Administrator لديه الصلاحية بإستخدام قاعدة البيانات لذلك أمكنه التعامل معها , أما المستخدم الآخر فليست لديه الصلاحية فلذلك يجب إضافة هذا المستخدم إلي قاعدة البيانات .

إضافة المستخدم كـ windows user بإختيار windows authentication وإختيار إسم المستخدم و الدومين, وإعطائه الصلاحيات اللازمة .

ومن الClient إجعل الConnection string على أساس أنها trusted connection

#14
Public Shared ReadOnly strCnn As New SqlConnection("data source =ECS; database=test;User ID=ecc\ahmed;Password=1955;Integrated Security=sspi;")
#15

قم بإضافة مستخدم لقاعدة البيانات و حدد من الدومين اسم المستخدم الذى تريده ان يستخدم قاعدة البيانات

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 25 مايو 2005 في 16:27

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#16

فعلا انا لم اقم بتحديد Domain Authentication عند تحميل سيكول

ولكن سؤال هنا قمت بتحديد مستخدم معين فى Connection String فهل يتحتم على تحديد 30 Connection String لكل30 مستخدم للبرنامج؟

#17

مرفق صورة توضح تحديد الدومين ثم تحديد مستخدم ضمن الدومين و بعد ذلك تحديد قاعدة البيانات

post-5617-1117028620_thumb.gif

تم تعديل هذه المشاركة بواسطة طارق إبراهيم في 25 مايو 2005 في 16:55

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#18

قمت بعمل كل هذا لكن دون جدوى

#19

:angry: قم بالتحويل إلى SQL Server Authentication و قم بانشاء مستخدم واحد لقاعدة البيانات و دع برنامجك يستخدمها باستخدام اسم المستخدم الجديد و بهذا تضمن تنفيذ السياسة من ال AD على المستخدمين و فى نفس الوقت تضمن استخدامهم لبرنامجك المتصل بال SQL Server

إذا سيكون لدينا 50 مستخدم يدخلون للويندوز باستخدام ال Domain Acount و يدخلون لل SQL Server باستخدام مستخدم وحيد يعمل بال MIXED Authentication

لزيادة الكفائة يمكنك عمل Connection Pooling تجمع فيه الاتصالات بقاعدة بياناتك

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#20

الأخوه الكرام السلام عليكم ورحمه الله و بركاته

أنا أفهم المشكله التى يتكلم عنها الأخ كيمو 2005

فقد واجتها من قبل

و قد قدمت حل أتمنى أن يرضيكم لها و هو يتلخص فى عمل تصريح دخول لجميع مستخدمى الدومين عن طريق إنشاء procedure عن طريق الكود و تشغيله أيضا عن طريق الكود.

لتنفيذ هذا الكود عليك الدخول على الجهاز الذى سوف تنفذ منه الكود ب ال ADMINISTRATOR الخاص بال DOMAIN

ثم تنفيذ الكود الآتى عن طريق ال ADO Command

تأكد من وضع مربع نص و قم بتسميته

txtDomain

كى تضع فيه إسم الدومين

cmd.CommandText = "CREATE PROCEDURE create_login AS EXEC sp_grantlogin '" & Trim(txtDomain.Text) & "\Domain Users' EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'sysadmin'  EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'securityadmin'  EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'serveradmin'  EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'setupadmin'  EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'processadmin'  EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'diskadmin'  EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'dbcreator'  EXEC sp_addsrvrolemember '" & Trim(txtDomain.Text) & "\Domain Users', 'bulkadmin '"
cmd.Execute

لقد قمنا الآن بإنشا

و أسميناه stored procedure

create_login

الآن نريد تشغيله كى يقوم بمهمته و هى إنشاء new login

لجميع مستخدمى الدومين

	cmd.CommandType = adCmdStoredProc
	cmd.CommandText = "create_login"
	cmd.Execute

إفتح ال إس كيو إل

و أدخل على

security

logins

لترى أنه أنشأ حق دخول جديد يدعى

Domain Users

أتمنى من الله أن تكون هذه الطريقه وافيه و مرضيه بإذن الله

سبحانك اللهم و بحمد أشهد أن لا إله إلا انت أستغفرك و أتوب إليك

wael_shehab@hotmail.com

لا إله إلا الله وحده لا شريك له له الملك و له الحمد يحى و يميت و هو على كل شيء قدير

هذا الموضوع مغلق.

مواضيع مشابهة