第一周学习问题

学习中遇到的问题

- 问题1

a.问题背景

表结构

  • 1.学生表
    Student(SId,Sname,Sage,Ssex)
    SId学生编号,Sname学生姓名,Sage出生年月,Ssex 学生性别
  • –2.课程表
    Course(CId,Cname,TId)
    CId课程编号,Cname 课程名称,TId 教师编号
  • –3.教师表
    Teacher(TId,Tname)
    TId教师编号,Tname教师姓名
  • -4.成绩表
    SC(SId,CId,score)
    SId学生编号,CId 课程编号,score 分数
b.问题描述

查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息

c.问题解决
  • 尝试1
    网上搜索到的方法为使用group_concat()函数:
    (1)将sc表按sid分组后的cid字符串拼接
    (2)将01同学的字符串与其他同学相比。
    此方法经过尝试并不能在oracle实现,可能原因:是其他数据库的特有函数
    解决失败
  • 尝试2
    继续思考一个小时,得出了正确逻辑:
    (1)排除没有学习01同学课程的同学(not in / !=any)
    (2)再此基础上筛选出和01同学课程数相同的同学(count)
    解决成功

- 问题2

a.问题描述

无论输入任何账户或者密码,只要选择dba身份登录都可以登录。
使用select user from dual 查看用户可知:任何登录成功都实际为sys用户。

b.出现原因

在查找相关资料后明白真正的原理:
Oracle认证用户有两种方式:操作系统认证与口令认证。操作系统认证也叫本地认证。

  • 操作系统认证:Oracle认为操作系统用户是可靠的,那么既然你能登录到操作系统,必然也能登录到数据库;
  • 口令文件认证:Oracle认为操作系统用户是不可靠的,如果要访问数据库,必须再次使用密码认证。
c.问题解决

将操作系统认证改为口令文件认证:
将sqlnet.ora中 SQLNET.AUTHENTICATION_SERVICES= (NTS) 屏蔽(前面加#)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值