创业,不能兼职(29)——角色,用户,权限
和程序员打交道的过程里,完全不懂技术名词完全白痴的我,也慢慢熟悉了一些概念。因为,开发时,他们和你讨论需求时,有时会问你。很多之前,作为外行,从来没有考虑过的概念和问题,慢慢就听说了一些了。
有些时候,我会因为不懂技术,用极其外行朴素的思维方式按自己的理解,去想象技术,有时就会有些东西在想象里想不出来,受到限制,觉得困难。
虽然,一直都有人和我说,你不需要考虑技术问题,你只需要考虑运营,考虑需求。
你提出需求,其他的,技术人员就会解决的。可过去,太多的事实给我的教训是,这句话非常非常错误。作为一个项目的发起人,你没有一些基本的常识,会经常遇到的问题是,你对一些需求可能都提的是表面化的,形象化,界面化,碎片化的。
你对技术人员不太强调那些数据,那些商业逻辑,那些背后的结构。你以为背后结构上,实现的是你以为以后可以扩展的东西。而实际上,那些不是深度挖掘用户需求的一般技术人员已经把你的这种表面需求,作为技术开发需求了。
还有会经常遇到的问题是,和你一起工作的程序员们,不可能样样都熟悉,也有很多知识结构上的短板和一些能力限制,如果,你没有一些基本的常识,可能会遇到开发人员说,这个问题,没办法解决,甚至要求砍掉需求。
开发人员可能遇到的问题,你也不能及时提醒。因为,人少,有时这样的彼此提醒,是很重要的。
所以,自己一定要尽量多学习。这样的学习,对我这样的技术纯白痴来说,有时很痛苦。但我认为,这个学习,其实有时不是要自己真正学会写程序,要理解那么准确,能看懂大致的描述性文字,有个直观感性的感觉,对一些东西的判断有个结论,就可以了。具体的,可以推荐技术人员自己看。
之前,很长一段时间,完全是自己在网上搜索,现在,慢慢认识的那些做技术的朋友们,又给了我一个解惑的渠道,比很多时候,盲目地搜索,甚至不知道如何搜索到答案要好多了。
今天,那个答应帮我试着做一小块功能的哥们问了我一个问题,他说,你这个系统,角色很少吧?
我愣了一下,然后,我们就聊了一下用户,角色,权限的问题。回头我又在网上搜索了一下。
最后,关于这个问题,我得出的感性结论是:
用户,如果网站内容,可以给所有人浏览,那么是可以有注册,不注册的用户。如果不登录,就不能看到全部内容的,就只有注册用户。只能看到部分内容的,应该也是注册了才算真正用户?或者说,这时,是非注册用户的部分权限受限?
我关心的,管理员,有删除,禁止发言,去后台操作等等,都属于权限。
一个用户,只能浏览,跟帖另外一个用户的东西,不能编辑删除另外一个用户的东西,也属于权限。
我说那什么是角色?他说,这个应该更多是OA里面的,。我后来想了想,大约那意思是,你是一个领导,他是采购,他是销售,领导部门,采购部门,销售部门,就是不同的角色。这各个部门,就是角色。这个角色里,可以有多个用户。某个用户被删除了,或者多了用户,也不影响这个角色的存在。我想,我想做的东西里,是不是管理员,和普通用户,就是2类不同的角色?其他的不同的角色我也还没想出来。
不过,我希望的是,这个管理员,能有多个不同权限的,除了系统管理员外,还有一些能有编辑管理某部分内容的管理员。系统管理员,不参与前台的编辑,不能有直接用户身份,但那些负责部分编辑内容的,自己可能就直接是用户的一员,就如论坛的斑竹。或者,比如有些页面,有推荐的内容,是由这些内容管理员选出来的优质内容,他们有操作置顶他们放在某些地方的权限。或者,这也是不同的角色?或者是不同的权限?
不过,关于这一点,我个人喜欢的平等自由公开的那种精神,其实,在内容上,我是觉得最好不用人为干预,按先后顺序排,按点击多少,回复多少排。。。剩下的,由用户主动搜索决定。
但又觉得,有时一个网站的气质,决定于它的优质部分的内容,决定于它被显现的优质内容,如果,没有一个引导,可能会由于一些差劣内容的显示,而驱赶了优质用户。
总之,这个要再想想。毕竟,网站优质气质的体现是有很多种办法的。不一定要明显的人为的人工干预。比如,知乎的限制注册,虽然,不适合我想做的网站使用,但也说明了这一点。
最近看到的一个朋友推荐的一个旅行网站,用起来实际体验其实非常差,完全不实用,明显不是真正琢磨了产品的人做的东西,可是界面非常干净,整洁,很多帖子的内容,图片也都非常好,正常有这样内容的用户,应该是不太会用这么难用的网站,明显是网站本身工作人员的作为。
具体到自己想做的事情来说,我在吸引最初的一定数量的优质用户,应该相对有优势一点。关键就是吸引了人来后,要有好产品,人家就不会走。这样一批优质用户,也是种子用户,就足够能不断产生优质内容,应该不太需要过多人工干预。不过,这都只是预计,一切,要等产品出来了才能知道。
回头继续说角色问题,他又说,那些比如一些网站,你是黄金会员,就能有什么权利,普通会员就没有,这个也是角色。这个。。。我没听太明白,我问,那是不是有些论坛,根据积分,有不同的上传照片,下载软件的权利,这属于角色?他说不是,这个是权限。我有些糊涂。我也觉得,这个属于积分系统对不同用户的权限分配,可是,不同角色,不也是有不同权限吗?他们不就是因为权限不同才有区别?积分系统,或者以后可能的鼓励系统,我还是想过的,只是现在没有想。
算了,先不要那么复杂了。目前,这真的还不是我觉得关注的重点,难点。要迅速解决最核心的部分才是。
我得承认,我好像还就是仅仅从自己是个普通用户身份在想,根本没过多想这个问题。只是因为做过一个小论坛管理员,进过后台,有过一些后台的权限,所以,就会在现在做的时候,想起来这个。不然,我连后台还有个可以比较清楚地管理的界面,有一些常规的项目,能很简单管理都不知道。还一直琢磨,那要是改一点东西都得技术人员去改数据库,那维护,得多麻烦啊。
刚刚看了一篇文章,讲角色,用户,权限的,虽然标题写着oracle的,也觉得好像略又所悟。http://www.cnblogs.com/yuepeng/archive/2011/03/18/1984015.html
一、用户
创建用户的语句
createuser用户名
identifiedby密码(不要加引号)
defaulttablespace默认表空间名quota5Mon默认表空间名
[temporarytablespace临时表空间名]
[profile配置文件名]//配置文件
[defaultrole角色名]//默认角色
[passwordexpire]//密码失效
[accountlock]//账号锁定
修改用户
alteruser用户名identifiedby密码quota10Mon表空间名
alteruser用户名accountlock/unlock
删除用户
dropuser用户名[cascade].如果要删除的用户中有模式对象,必须使用cascade.
二、概要文件
资源限制参数:对CPU时间,逻辑读,用户并发会话数,空闲时间,连接时间等数据库和系统资源进行限制。资源参数的值可以是整数,也可以是default或者unlimited。会话级限制是对用户在一个会话过程中所能使用的资源进行限制,调用级限制是对一条SQL语句在执行过程中所能使用的资源进行限制。
资源限制参数有以下几个:sessions_per_user,cpu_per_session/call,lagical_reads_per_session/call,connect_time,idle_time(会话的空闲时间),composite_limit,private_sga。
口令管理策略参数包括:failed_Login_attempts,password_lock_time,password_life_time,password_grace_time,password_reuse_time,password_reuse_max,password_verify_function.
在数据库启动之前,可以通过设置resourcelimit来决定资源限制的状态。默认是false,不启用。在数据库启动后,可以使用altersystem来改变资源限制的状态。altersystemsetresourcelimit=true/false.
创建概要文件,可以使用createprofileprofilenamelimit[parameters]的语句。
修改概要文件,可以使用alterprofileprofilenamelimit[parameters]
删除概要文件,dropprofileprofilename[cascade如果已经分配给某个用户]
下面的视图是数据库用户和配置文件信息:
DBA_USERS所有用户,
all_users当前用户能看到的所有用户,
user_users描述当前用户,
dba_ts_quotas描述用户的表空间限额,
user_ts_quotas描述具体用户的表空间限额,
user_password_limits当前用户的口令概要文件参数,
user_resource_limits当前用户的资源限制,
DBA_profiles所有的概要文件及其限制,
resource_cost每个资源的开销,
V_$session每个当前会话的会话信息,
v_$sesstat用户会话的统计数据,
v_$_statname,proxy_users可以呈现其他身份的用户.
三、权限
系统权限是执行一种特殊动作或在对象类型上执行一种特殊动作的权利。这些权限可以授权给用户或者角色,不过一般只授予管理人员和应用开发人员,终端用户不需要这些相关功能。获得授权的用户可以将该权限授予其他用户或者角色,也可以从被授权的用户或者角色收回系统权限(不管是不是自己授权的,都可以收回)。
对象权限是指在指定的表、视图、序列、过程、函数或者包上执行特殊动作的权力。对于不同类型的对象,有不同的对象权限。像聚集,索引,触发器,数据库链等没有相关的对象权限,它们由系统权限控制。模式的所有者对模式中的对象具有全部对象权限。这些对象的所有者可将这些对象上的任何对象权限授予其他用户。被授权的那些用户可以将获得的权限继续授权给其他人。
四、角色
角色是相关权限的命名组,可以授权给用户或者角色,但不能出现循环授权
任何角色都可授权给任何数据库用户
一个角色可以被授予系统权限,或者对象权限
角色不包含在任何模式中,所以建立角色的用户被删除后,角色不会受到影响
创建角色的语句是createrole角色名
grant{selectontablename}torolename为该角色授予一些对象权限和系统权限。角色也需要认证,不过创建角色时默认是不认证的。可以用identifiedby子句来加上认证
oracle事先定义了五个角色。conncet具有创建表、视图、序列等权限。resource具有创建过程,触发器,表,序列等权限,dba具有全部系统权限,exp_full_database和mp_full_database具有卸出与装入数据库的权限。可以查询sys_dbs,sys_privs可以了解各种角色拥有的权限。
下面是数据库中有关权限和角色的视图:
dbacolprivs描述db中所有列对象的授权,就是具体到某个字段的那些授权
allcolprivs描述当前用户或者具有public权限用户的所有列对象授权
usercolprivs描述列对象权限,这些权限的授予者或者被授予者,是当前用户。
allcolprivsmade描述列对象权限,这些权限的所有者或者授予者是当前用户
usercolprivsmade描述列对象权限,这些权限的授予者是当前用户,
allcolprivsrecd描述列对象权限,这些权限的被授予者是当前用户或者public
usercolprivsrecd描述列对象权限,这些权限的被授予者是当前用户
dbatabprivs数据库中所有表的授权
alltabprivs描述表权限,这些权限的授予者是当前用户或者public
usertabprivs列出当前用户是其被授予者所有对象的授权
alltabprivsmade描述当前用户所做的,或者在当前用户所拥有的对象上的对象授权
usertabprivsmade列出在当前用户所拥有的所有对象上的授权
alltabprivsrecd描述对象授权,这些授权的被授予者是当前用户或者public
usertabprivsrecd描述对象授权,这些授权的被授予者是当前用户
dbaroles数据库中存在的所有角色//没有找到这个视图
dbarole/sysprivs授予给用户或角色的角色/系统权限
userrole/sysprivs授予给当前用户的角色/系统权限
roleroleprivs授予给其他角色的角色,只是该用户可以访问的角色信息
rolesysprivs授予给角色的系统权限的信息,提供的只是该用户可以访问的信息
roletabprivs授予给角色的对象权限的信息,提供的只是该用户可以访问的信息
sessionprivs/roles用户当前激活的权限和角色
五、角色和权限的操作
授予权限或者角色
grant系统权限to用户名[withadminoption].带上with子句,可以让该用户有权限把系统权限授予其他用户
grant对象权限/allto用户名[withgrantoption].带上with子句,可以让该用户有权限把对象权限授予其他用户
有三类对象权限可以授予表或者视图的字段,分别是insert,update,references。比如grantselect,insert(字段名),update(字段名)on表名to用户名withgrantoption.
grant角色名to用户名[withadmin/grantoption].可以把角色授予用户。如果使用了withadminoption子句,该用户可以从任何具有该角色的用户那里收回角色,也可以删除或者修改这个角色。
在同一条grant语句中,可以同时为一个用户授予系统权限和角色,但是不能同时授予对象权限和角色。
收回权限
revokeselect,updateon表名from用户名
也可以用all或者allprivileges将某个对象所有的对象权限都收回。
激活与禁用角色
当用户连接到数据库时,只有他的默认角色是激活的,可以用alteruser用户名defaultrole角色名改变默认角色。还可以用setrole激活或禁用自己拥有的角色。