If R(u,v)

If we have a parametrization R(u,v), then D[R,u] is a tangent vector to a curve with v some constant. Also, D[R,v] is a tangent vector to a curve with u some constant. These are both in the tangent plane.
The normal vector is then given by the cross product of these two vectors!

In[104]:=

  Clear[R,u,v]
  R[u_,v_]:={2 Cos[u] Sin[v],2 Sin[u] Sin[v], 2 Cos[v]}

In[105]:=

  nv=Cross[D[R[u,v],u],D[R[u,v],v]]
  Simplify[nv]

Out[105]=

                   2                  2
  {-4 Cos[u] Sin[v] , -4 Sin[u] Sin[v] , 
   
             2                                2
    -4 Cos[u]  Cos[v] Sin[v] - 4 Cos[v] Sin[u]  Sin[v]}

Out[106]=

                   2                  2
  {-4 Cos[u] Sin[v] , -4 Sin[u] Sin[v] , -2 Sin[2 v]}

Let's look at the point where u=v=Pi/4.

In[107]:=

  normalv=vectorPlot[{R[Pi/4,Pi/4]},{R[Pi/4,Pi/4]+nv/.{u->Pi/4,v->Pi/4}}];

Oops! This normal vector will point inside the sphere. Let's use the opposite one.

In[108]:=

  normalv=vectorPlot[{R[Pi/4,Pi/4]},{R[Pi/4,Pi/4]-nv/.{u->Pi/4,v->Pi/4}}];

In[109]:=

  Show[sph,normalv];

In[110]:=

  tp=ContourPlot3D[({x,y,z}-R[Pi/4,Pi/4]).(-nv/.{u->Pi/4,v->Pi/4}),
  {x,-2,2},{y,-2,2},{z,-2,2}];

In[111]:=

  Show[sph,normalv,tp];

Another option for the normal plane would be to use the formulation
n1(x-x0)+n2(y-y0)+n3(z-z0)=0.
Then you could use z=[-n1(x-x0)-n2(y-y0)+n3z0]/n3
and then use Plot 3D

In[112]:=

  n1=(nv/.{u->Pi/4,v->Pi/4})[[1]]
  n2=(nv/.{u->Pi/4,v->Pi/4})[[2]]
  n3=(nv/.{u->Pi/4,v->Pi/4})[[3]]
  x0=R[Pi/4,Pi/4][[1]]
  y0=R[Pi/4,Pi/4][[2]]
  z0=R[Pi/4,Pi/4][[3]]

Out[112]=

  -Sqrt[2]

Out[113]=

  -Sqrt[2]

Out[114]=

  -2

Out[115]=

  1

Out[116]=

  1

Out[117]=

  Sqrt[2]

In[118]:=

  tp2=Plot3D[(-n1(x-x0)-n2(y-y0)+n3 z0)/n3,{x,-2,2},{y,-2,2}];

In[119]:=

  Show[sph,normalv,tp2];

Up to Tangent Planes