|
查看: 1764|回复: 18
|
sql server 2005 的問題, 幾個user共用同database的問題
[复制链接]
|
|
|
比如說
我有
user1, user2, user3
我想create1個login user, 比如叫share, 還有1個database叫shareDB
然後呢..
我想user1, user2, user3 login時都用share login進shareDB
然後sql server會自動create1個他們自己的database在shareDB裡面比如db1, db2, db3
有人可以教我怎麼做嗎..沒有頭緒
其實我的purpose是要每次有新user login要進那個database時, 不用去create 1個new user, 因為有很多user
或者各位老大有其他方法給我嗎? 謝謝喔 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-8-2009 02:55 PM
|
显示全部楼层
上網找不到相關例子呢。。(我也不懂怎麼找。。不會表達)
但是看到t-sql, 不知道這個是否適用?
或者我可以寫1個script在database裡面嗎?
比如說
IF (user1loginName).database NOT EXISTS
CREATE user1
這樣當有新user login時, 就會check他的login name(windows的login name)
如果沒有這個table或者database, 就會create給他
不知道可以嗎? 可以的話應該寫在那裏呢? 我是新手很多不會.. |
|
|
|
|
|
|
|
|
|
|
发表于 11-8-2009 03:01 PM
|
显示全部楼层
|
呃,我不是很明白你的问题所在,不过,如果你要给每个User制造一个Database,那如果你有100个user,你岂不是要有100个database?这是很不实际的呢。一般的做法是在你的Database里面建设一个用来登记 User 的 Table,把所有的user资料储存在这个Table里面,这么一来,增加一个新的User就只不过是在这个Table里面增加一笔新的record罢了。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-8-2009 03:14 PM
|
显示全部楼层
原帖由 geekman 于 11-8-2009 03:01 PM 发表 
呃,我不是很明白你的问题所在,不过,如果你要给每个User制造一个Database,那如果你有100个user,你岂不是要有100个database?这是很不实际的呢。一般的做法是在你的Database里面建设一个用来登记 User 的 Table, ...
是咯。。我上面說的
"我想create1個login user, 比如叫share, 還有1個database叫shareDB
然後呢..
我想user1, user2, user3 login時都用share login進shareDB"
就是這個意思..我表達得很糟糕..自己看了都有點亂的
那我要怎麼"里面建设一个用来登记 User 的 Table"呢
是寫script呢?query?還是直接在裡面設定的呢?
亂水喔
而且還有1個問題就是, user他們login時都用同1個id(sql server authentication), 進到裡面database才來判斷他們的windows login name來create 他們的table (上面我不懂table適合, 還是database, 所以我寫"table/database")
這點無從下手咯..
補充1下: 我上面真的是寫database耶..不好意思. 你說的table才是對的
[ 本帖最后由 mdw1121686 于 11-8-2009 03:30 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|
发表于 11-8-2009 03:21 PM
|
显示全部楼层
我不知道为什么你要这样做? database 里面 只可以create table, 不能再create database.
如果你是建一个网络系统, user1,user2,user3 是你的网络系统用户, 而这些user只是存储在table里面. 网络系统会使用一个database login操作整个系统. 你可以用这个database login execute script 自動create 他們自己的 database.
不是很同意create 每个user database, 10个user不就有10个database? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-8-2009 03:33 PM
|
显示全部楼层
原帖由 longarm 于 11-8-2009 03:21 PM 发表 
我不知道为什么你要这样做? database 里面 只可以create table, 不能再create database.
如果你是建一个网络系统, user1,user2,user3 是你的网络系统用户, 而这些user只是存储在table里面. 网络系统会使用一个da ...
恩..上面geekman也是這樣教訓我咯
至於database login execute script, 有沒有什麼相關資料嗎?
或者該寫在哪裡呢? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-8-2009 03:44 PM
|
显示全部楼层
請問你所說的script是不是trigger呢?
因為我看了trigger的解釋是自動執行的
如果是的話..
CREATE TRIGGER triggerLogin
ON shareDB
AFTER xxxxxxxxxx ""這裡如何判斷user login?""
AS
BEGIN
IF NOT EXISTS userLoginName.database ""這裡怎樣get userLoginName? & 可以用IF NOT EXISTS嗎 ""
CREATE TABLE userLoginName.database
END;
GO
還是這方法根本錯的? |
|
|
|
|
|
|
|
|
|
|
发表于 11-8-2009 03:57 PM
|
显示全部楼层
OK,我本身没有用过MS SQL SERVER(我是使用MySQL的),而你也没有提到你是使用什么语言来编写你的Front End(也就是你用来给User和Database进行操作的Application,这个可以是C++,VB,C#,Java,ASP,甚至是PHP + HTML),我只好以自己的经验来给你提供一些意见。
一般上,SQL Server本身会有一个Authentication,这是你login这个Server的Root Account。我想,你所说的 Shared Account 应该就是指这个Root Account,这是任何想连接入 SQL Server 的用户或软件都必须使用这个account来登入Server。一般上这个Root Account应该是不对用户公开的,因为这关系到整个Database,甚至是整个Server的保安问题。视乎你的Front End是什么方式,你登入Server的方式也有所不同,例如你会使用一个Server Connector Component,或者自己编写其Connection Script,把Root Account的登入资料包含在里面,而无需让User插手,这是Application to Server的连接。
接下来你就会给你的Application设定User Account。这个是你自己必须管理的。这个就是User to Application的连接。所以以上三者之间的关系是
《User》---User Account--->《Application/Database》---Root Account--->《Server》
你想要询问的,应该就是如何管理 User Account 的部分吧?
咱们就举个例子:你的Database叫做myDatabase,而里面有个Table用来储存User Information的,叫做 myUserTable。
myDatabase(Database)
|
|->myUserTable(Table)
| |->User_ID(Field), User_Password(Field)
|->Other_Tables...
要增加User的话,你可以使用Query或者Script:- INSERT INTO myDatabase.myUserTable
- VALUES(:userID, :userPassword)
复制代码 :userID 和 :userPassword 是Parameters,你必须在你的Front End里面把这些Parameter的数值填进去你的Query里面。
然后当你的User Login 你的Application时,你所要做的只是根据User提供的User ID 和 Password 来Query 你的 User Table,如果有找到Exact match的话就允许 User 使用你的 Database,否则就拒绝他的使用。
基本上就是这样。
[ 本帖最后由 geekman 于 11-8-2009 04:02 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-8-2009 04:16 PM
|
显示全部楼层
原帖由 geekman 于 11-8-2009 03:57 PM 发表 
OK,我本身没有用过MS SQL SERVER(我是使用MySQL的),而你也没有提到你是使用什么语言来编写你的Front End(也就是你用来给User和Database进行操作的Application,这个可以是C++,VB,C#,Java,ASP,甚至是PHP + ...
我其實不是寫1個front end來控制的
是這樣的, 公司要用1個software, 叫smt kingdom
所以設定上有些限制咯, 我只能控制sql server, 不能改那個software
現在就是要user login進去時有自己的table, 要同1個database
而老闆的要求就是"增加user時也不用手動去做東西"
而同時也是說, 無論什麼user都可以login的, 只要他們有sql account, 比方說
"lim第一次用smt(sql server authentication id)login, 就create lim.table"
"lee第一次用smt(sql server authentication id)login, 就create lee.table"
"lau第一次用smt(sql server authentication id)login, 就create lau.table"
"lim第2次login時, 就不用create了, 不過lim只能限制他用lim.table"
我是還沒畢業的trainee來的..今天也是第一次開sql server>< 希望多多包涵喔.. |
|
|
|
|
|
|
|
|
|
|
发表于 11-8-2009 04:23 PM
|
显示全部楼层
|
这么一来,这个smt Kingdom 就是你的Front End,只不过这是一个Closed System (因为你无法改动它的运作方式)。你应该去质询smt kingdom的提供者,如何使用他们的软件来达成你的目的。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-8-2009 04:35 PM
|
显示全部楼层
原帖由 geekman 于 11-8-2009 04:23 PM 发表 
这么一来,这个smt Kingdom 就是你的Front End,只不过这是一个Closed System (因为你无法改动它的运作方式)。你应该去质询smt kingdom的提供者,如何使用他们的软件来达成你的目的。
erm..這樣喔..我也是很困擾拉..跟老闆這樣講的話一定是以為我不想做的咯
難道不能寫trigger在database裡面嗎?
像我在第7樓寫的呢? |
|
|
|
|
|
|
|
|
|
|
发表于 11-8-2009 04:48 PM
|
显示全部楼层
我完全不知道smt kingdom是如何运作的,对我来说它就是一个黑箱,如果我要知道如何控制这个黑箱,那很自然的,我必须向制造这个黑箱的人询问其控制方法。这没有什么可耻的,也没有什么不妥当的。
再说,购买一个软件,理所当然地,软件的开发商必须提供至少最低程度的使用说明,这是业界公认的规则,毕竟软件的售价是包括最基本的用户支援服务的。
除非,你们的这份软件是 “不包含用户支援” 的那种,ahem。。。的版本?
能不能用你在7楼所写的,你还是得向smt kingdom的作者查询,毕竟他们最清楚自己的软件。
[ 本帖最后由 geekman 于 11-8-2009 04:55 PM 编辑 ] |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 11-8-2009 05:00 PM
|
显示全部楼层
原帖由 geekman 于 11-8-2009 04:48 PM 发表 
我完全不知道smt kingdom是如何运作的,对我来说它就是一个黑箱,如果我要知道如何控制这个黑箱,那很自然的,我必须向制造这个黑箱的人询问其控制方法。这没有什么可耻的,也没有什么不妥当的。
再说,购买一个软 ...
好的, 其實那個東西我也不知道如何操作, 他的table存著什麼資料我也不懂的
真的很謝謝你喔, 也謝謝longarm
花了不少時間看我眼花撩亂的文章
無論如何至少讓我了解了不少
放工時間到了, 我先回家有時間的話裝個sql srv來再研究看看
不能就真的要打電話了
balik dulu! |
|
|
|
|
|
|
|
|
|
|
发表于 12-8-2009 04:21 PM
|
显示全部楼层
|
哈哈, 来晚了. 原来你用另一个软件. trigger 通常用在insert, update, delete records. 没有听过用在login. 如果你知道那个是user table, 你就写个 insert trigger 在那个table. 每一次有新的record, 就会自动trigger |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 12-8-2009 10:44 PM
|
显示全部楼层
原帖由 longarm 于 12-8-2009 04:21 PM 发表 
哈哈, 来晚了. 原来你用另一个软件. trigger 通常用在insert, update, delete records. 没有听过用在login. 如果你知道那个是user table, 你就写个 insert trigger 在那个table. 每一次有新的record, 就会自动trigge ...
後來也找到trigger可以在登錄時執行了, 有個"FOR LOGON"的
不過不會get windows user name, 上網找了應該是沒有..都只能get sql server login name而已
頭大咯.. |
|
|
|
|
|
|
|
|
|
|
发表于 12-8-2009 11:36 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 13-8-2009 11:16 AM
|
显示全部楼层
原帖由 aiklee10 于 12-8-2009 11:36 PM 发表 
你用schema la zzzzz
我不會用喔..可以大概教我嗎? |
|
|
|
|
|
|
|
|
|
|
发表于 13-8-2009 02:38 PM
|
显示全部楼层
|
google search sqlserver schema |
|
|
|
|
|
|
|
|
|
|
发表于 14-8-2009 11:16 AM
|
显示全部楼层
搂主,如果想要在没有Vendor的帮助下完成你的任务,那么你就必须尝试了解这个系统的运作原理。
首先,这个系统是用SQL Database? User Login Authentication 是用 SQL 里的User Account? 如果手动的话,是不是每次有新的 User,就要在 SQL 里面加一个 User Account? 还是要在那个系统的 Database's Table 加一个 User Account? 每个 User 都供用一个 Login Account? 还是都有各自的 Login Account?
如过这个系统用的是 SQL 的 User Account, 而每个 User 又需要有各自的 Login Account。这~ 在不能修改系统源码的情况下,应该没法做到吧。
还有,你需要找出 Trigger Point, 在哪个地方可以让你加入你要的 Trigger Point. 比如说 UserA 在 System 里没有户口,那么 System Identify Authentication 的地方就是你的 Trigger Point,你需要在 Authentication Fail 的那里加上你要 Create Tables 的源码。
就像楼上专家们所说的,最好还是问问 Vendor 吧。在不了解系统原理的情况下,你就要像黑客那样找出系统运作原理,然后加以修改。而且,这样做有一些风险,你不知道你的做法,在这个系统的下个版本还能不能用。
[ 本帖最后由 eddom 于 14-8-2009 11:25 AM 编辑 ] |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|