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

فصل مستخدم من قاعدة بيانات معينة

مغلق
بدأه jooorj في 6 مارس 2007 · 10 رد · 853 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هل من طريقة لفصل أحد المستخدمين من قاعدة البيانات عن طريق إجراء أو أوامر باستخدام ال SQL Query

وشاكر سلفا..

موقوف من المشاركة لقلة الأدب

============================

#2

sp_dropuser

مثال:

EXEC sp_dropuser 'wael'

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

لقد ظننت انك تريد حذف المستخدم, اسف لم انتبه

يمكنك استخدام التعليمة Kill حيث تأخذ الشكل التالي:

KILL {spid | UOW} [WITH STATUSONLY]

حيث يمكنك الحصول على spid من تنفيذ الاجرائية المخزنة sp_who, حيث انّ spid هو رقم جلسة لمستخدم متصل على المخدم

يعني في النهاية سوف يكون شكل التعليمة مثلاً

kill 52

ملاحظة: لا يمكنك تنفيذ تعليمة Kill على الاتصال الذي قمت بعمل Login من خلاله.

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#4

لكن يبقى السؤال كيف يمكن اطفاء يوسر بعينه أو كيف احضر ال SPID الخاص باليوسر ali مثلا لاجل عمل kill PSID

:)

موقوف من المشاركة لقلة الأدب

============================

#5

لقد قمت باعطائك الفكرة على امل ان تقوم بتكميل ما تريد لوحدك. ولكن على ما يبدوا لا احد يريد ان يتعب نفسه, الكل يريد الشيئ جاهز

هذه اجرائية مخزنة قمت بعملها لكي تقوم بفصل مستخدم معين و ذلك باعطاء اسم قاعدة البيانات و Login name

--by wael dalloul at 8-3-2007,10:15
Create procedure KillUser(@dbname varchar(100),@loginame varchar(100))
as
--create table to get the information from sp_who stored procedure.
Create table #sp_who (SPID int , ecid int , status varchar(30),loginame varchar(100),
hostname varchar(100),blk int , dbname varchar(100) , cmd varchar (100))

--Get the recordes from stored procedure sp_who into temp table #sp_who
insert into #sp_who exec sp_who

declare @SPID int
--get the SPID for the loginname and dbname
select @SPID = SPID from #sp_who where dbname = @dbname and loginame = @loginame
declare @SQL nvarchar(100)

set @SQL = 'kill ' + convert(nvarchar,@SPID)
--execute the stored procedure
exec sp_executesql @sql
--drop the temp table after finnish

drop table #sp_who
return 0

لتنفيذ الاجرائية السابقة نكتب مثلاً:

exec KillUser 'DBName','sa'

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

تم تعديل هذه المشاركة بواسطة Wael Dalloul في 8 مارس 2007 في 11:50

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#6

مشكووووووووووووووووووووووووووووور

بارك الله فيك

والله يا اخي لاني مش خبير بال StoredProcedure لكن انا دائما أجمع الافكار واتعب بها فعلا :)

لكن هنا بسبب قلة الخبرة والحاجة الماسة

جزاك الله كل خير لقد أوفيت بالمطلوب وجاري التجريب ...(F)

موقوف من المشاركة لقلة الأدب

============================

#7

اخي وائل شكرا لشيفرتك فهي تعمل بشكل رائع

ولقد قمت بتطويرها بحيث صنعت Stored Procedure تقوم بإغلاق كل المستخدمين من نفس الاسم حيث ان الاجراء المشروح من قبلكم اخي الحبيب لا يغلق الا اخر SPID فلو فرضنا ان 10 اشخاص داخلين على الداتا بيس بنفس ال Login فلن يغلق الا الاخير منهم ،، وأود أن أقول أنني طورت في شيفرتك وأستفدت منها كثيرا وخرجت بهذا العمل المتواضع والذي أتمنى أن يفيد الجميع.

--لاغلاق كل المتصلين بالداتا بيس  دفعة واحدة
--by wael dalloul at 8-3-2007,10:15
create procedure KillUser(@dbname varchar(100),@loginame varchar(100))
as
--create table to get the information from sp_who stored procedure.

Create table #sp_who (SPID int , ecid int , status varchar(30),loginame varchar(100),
hostname varchar(100),blk int , dbname varchar(100) , cmd varchar (100),request_id varchar(100))

--Get the recordes from stored procedure sp_who into temp table #sp_who
insert into #sp_who exec sp_who

declare @SQL nvarchar(100)

------- 
DECLARE @PID nvarchar(11)-- SPID 1,2,3
DECLARE c1 CURSOR FOR
SELECT SPID
FROM  
#sp_who 
where
 dbname = @dbname and loginame = @loginame
OPEN c1

FETCH NEXT FROM c1
INTO @PID

------
WHILE @@FETCH_STATUS = 0
BEGIN

PRINT @PID + ' killed... ok'
		set @SQL = 'kill ' + convert(nvarchar,@PID)
		--execute the stored procedure
		exec sp_executesql @sql

FETCH NEXT FROM c1
INTO @PID 
END

CLOSE c1
DEALLOCATE c1

drop table #sp_who

موقوف من المشاركة لقلة الأدب

============================

#8

جميل جدا اخي jooorj, لم انتبه انّ Login name,db name لا تشكل Unique

الحمد لله انني استطعت ان اساعدك, و شكرا لك لانك وضعت الكود الذي قمت بعمله

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#9

في سؤال كيفية منع متصل من الاتصال لمدة ربع ساعة مثلا حتى ينتهي الصيانة مثلا

موقوف من المشاركة لقلة الأدب

============================

#10

اعمل Pause لل service ولن يستطيع احد الدخول و عندما تنتهي من عملية الصيانة اعمل continue.

ملاحظة: اطرح اي موضوع مختلف في مشاركة منفصلة

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#11

اها اخي وائل انا شاكر لاهتمامك

وبارك الله فيك

موقوف من المشاركة لقلة الأدب

============================

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…