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

تغيير ال owner للملفات التي تم نقلها الى dbo

مغلق
بدأه أبو محمـد في 17 يناير 2005 · 8 رد · 938 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ،،،

لقد قمت ولله الحمد بنقل قاعدة البيانات من جهازي إلى السيرفر .

لقد قامات الشركة المستضيفة بإرسال اسم مستخدم وكلمة مرور لاتصالي بسيرفر قاعدة البيانات .

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

والمجلة التي أرغب بإنزالها لا إلا إذا كان المالك Owner هو dbo

كيف أغير المالك بهذه الحالة إلى dbo

#2

لا يمكنك تغيير اسم الحساب الذى ارسلته لك شركة الاستضافه

Technical Lead Developer

My LinkedIn Profile

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

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

#3

شكرا جزيلا أخي طارق

سأبحث عن حل آخر

#4

هلا فسرت كلامك مره اخرى

اقتباس
والمجلة التي أرغب بإنزالها لا إلا إذا كان المالك Owner هو dbo

اى انك لا تستطيع وضع المجله على السيرفر إلا إذا كان المالك dbo ام ان هناك شئ غير واضح

Technical Lead Developer

My LinkedIn Profile

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

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

#5

المجلة يتم وضعها بشكل طبيعي ولكن لا تشتغل إلا إذا كان المالك dbo وعند وضعها يكون المالك هو اسم المستخدم المرسل إلي .

لقد وجدت كود لتغيير ال owner

EXEC sp_changeobjectowner 'authors', 'Corporate\GeorgeW'

و يتم تطبيقه على جدول جدول وهذه متعبة جدا أريد كود يغير كل الجداول الموجودة .

وهذه الصيغة العامة للدالة :

sp_changeobjectowner [ @objname = ] 'object' , [ @newowner = ] 'owner'

تم تعديل هذه المشاركة بواسطة أبو محمـد في 17 يناير 2005 في 07:17

#6

لقد وجدت كود يؤدي الغرض

Problem: you have a whack of SQL Server tables and SPs that need their ownership changed and you don't have much time. 

Answer: Why not have SQL Server produce a complete set of T-SQL statements to do it for you? Here is how: 

To make this less labour-intensive, here is a neat tip: Lets say you have scattered tables and SP's that have incorrect owners, in this case "liwsa_sa" and we want to change them ALL to dbo without manually doing it. 

Step 1: Copy and paste the code below into Query Analyzer. Execute it and it will create a SP called asl_chObjOwner. Feel free to change the name of course. 

Step 2: In QA, enter: exec asl_chObjOwner 'liwsa_sa', 'dbo' 

Step 3: The result of Step 2 is the text you need to execute to rename all the tables and SP's in question. Select this output, and execute it in QA. You will be rewarded with every table and SP having its' ownership changed. 

I hope this helps, i know it has become a staple in my SQL Server bag of tricks! drew.. 



=========Start of asl_chObjOwner code============================ 
if exists (select * from sysobjects where id = object_id(N'[dbo].[asl_chObjOwner]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
drop procedure [dbo].[asl_chObjOwner] 
GO 

SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON 
GO 

CREATE proc asl_chObjOwner( @usrName varchar(20), @newUsrName varchar(50)) 
as 
-- @usrName is the current user 
-- @newUsrName is the new user 

set nocount on 
declare @uid int -- UID of the user 
declare @objName varchar(100) -- Object name owned by user 
declare @currObjName varchar(100) -- Checks for existing object owned by new user 
declare @outStr varchar(256) -- SQL command with 'sp_changeobjectowner' 
set @uid = user_id(@usrName) 

declare asl_chObjOwnerCur cursor static 
for 
select name from sysobjects where uid = @uid 

open asl_chObjOwnerCur 
if @@cursor_rows = 0 
begin 
print 'Error: No objects owned by ' + @usrName 
close asl_chObjOwnerCur 
deallocate asl_chObjOwnerCur 
return 1 
end 

fetch next from asl_chObjOwnerCur into @objName 

print '-- ========================================================================' 
print '-- >>> Check for existing targets first, ..' 
print '-- >>> If found, remove the instructions to redo ownsership for those items, ' 
print '-- >>> Then copy the output to another QA window and run!' 
print '-- ===========================================================================' 

while @@fetch_status = 0 
begin 
set @currObjName = @newUsrName + "." + @objName 
if (object_id(@currObjName) > 0) 
print 'WARNING *** ' + @currObjName + ' already exists ***' 
set @outStr = "sp_changeobjectowner '" + @usrName + "." + @objName + "','" + @newUsrName + "'" 
print @outStr 
print 'go' 
fetch next from asl_chObjOwnerCur into @objName 
end 

close asl_chObjOwnerCur 
deallocate asl_chObjOwnerCur 
set nocount off 
return 0 


GO 
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON 
GO 
=========End of asl_chObjOwner code============================

وهذا الرابط مصدر المشاركة :

http://asp.net/Forums/ShowPost.aspx?tabindex=1&PostID=629436

#7

شكراً لك مشاركتنا الحل و اعتذر عن خطأى فى الاجابه عليك

Technical Lead Developer

My LinkedIn Profile

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

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

#8

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

ولكن السكربت الذي نسخته في الاعلى يسهل الموضوع كثيرا. لكن ...

هل جرب احد ان يغير مالك قاعدة البيانات من dbo الى أي مستخدم آخر بهذا السكربت.

هذا هو ما احتاجه لكن المشكلة أن كثير من الجداول يملكها dbo في قاعدة البيانات ويجب عدم تغير مالكها لشخص آخر (في الحقيقة لم أجرب, أخاف أن يحدث شيئ لقاعدة البيانات )

كما نلاحظ فان هذا السكربت يقوم بالحصول على اسماء الجدوال والعلاقات وال .... من قاعدة الجدول dbo.sysobject . بعد أن تفحصت هذا الجدول وجدت أنه يحتوي على حقل باسم xtype . فقمت بالبحث ضمن الكتب الأونلاين التي تاتي مع MSSQL ووجدت الشرح التالي

Object type. Can be one of these object types: 
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
FN = Scalar function
IF = Inlined table-function
P = Stored procedure
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure 
S = System table
TF = Table function
TR = Trigger
U = User table
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure

وكانت لي الملاحظات التالية

أولا القيمة D لم افهم ما معناه (سوف أقوم بالتحري عنه لاحقا)

القيمة L لا أعتقد أن له علاقة بقاعدة البيانات بشكل مباشر (أي لا أعتقد أنه يجب ايضا نقل ملكيته)

القيمة S بشكل لا يقبل الشك لا يجب نقله (أعتقد أن نقله يسبب مشاكل أو على اقل تقدير لا يمكن نقله)

ولذلك أقترح تغير السطر

select name from sysobjects where uid = @uid

الى

select name from sysobjects where uid = @uid and xtype not in('L','S','D')

أرجو في حالة أن جرب احد هذا الكود أن يهبرني بنتيجته

ملاحظة لاحظت لأيضا وجود حقل type ضمن جدول sysobjects هل يدري أحد ما الفرق بين xtype و type ؟

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#9

السلام عليكم ،،،

شكرا أخي DotNetExpert على المشاركة الرائعة .

اقتباس
هل جرب احد ان يغير مالك قاعدة البيانات من dbo الى أي مستخدم آخر بهذا السكربت.

بعض الجداول يرفض تعديلها .

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

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